C语言的字符数组和字符串的区别

Python010

C语言的字符数组和字符串的区别,第1张

1、长度不同:

对于字符数组,其长度是固定的,其中任何一个数组元素都可以为 null 字符。因此,字符数组不一定是字符串。字符串的结尾是以null 字符结尾,所以长度会有所不同。

2、结尾不同

对于字符串,它必须以 null 字符(也就是'\0',用十六进制表示为 0x00)结尾,其后的字符不属于该字符串。

字符串一定是字符数组,它是最后一个字符为 null 字符的字符数组。字符数组则不会自动增加任何东西。

3、对于字符串,可以直接使用 printf 的 %s 打印其内容;而对字符数组,很显然使用 printf 的 %s 打印其内容是不合适的。

扩展资料:

字符串函数应用

1.连接运算 concat(s1,s2,s3…sn) 相当于s1+s2+s3+…+sn.

例:concat('11','aa')='11aa'

2. 求子串。 Copy(s,I,I) 从字符串s中截取第I个字符开始后的长度为l的子串。

例:copy('abdag',2,3)='bda’

3. 删除子串。过程 Delete(s,I,l) 从字符串s中删除第I个字符开始后的长度为l的子串。

例:s:='abcde'delete(s,2,3)结果s:='ae'

4. 插入子串。 过程Insert(s1,s2,I) 把s1插入到s2的第I个位置

例:s:=abcinsert('12',s,2)结果s:='a12bc'

参考资料:百度百科  c语言(c语言)

赞同以上的网友说的处理方式不同,我来完善一下。

一、字符串

"ABC"//这是一个字符串常量(也叫字符串字面量)

上面的例子就是一个字符串,看似其有3个字符,实际上的处理是4个字符,包括C后面的'\0'字符也就是空字符null。编译器遇到空字符就结束处理了。

在编程中也可以把字符串放到字符串数组当中处理:

char str1[] = "ABC"//编译器会自动计算字符串的长度

char str2[20] = "ABC"//这是一个字符串数组

用双引号括起来的内容被视为指向该字符串储存位置的指针,类似于把数组名作为指向该数组位置的指针。

也可以这样初始化一个字符串数组:

char str3 [4] = {'A','B','C','\0'};//字符串的数组的长度要确保比字符串长度多1以便为了容纳'\0'

注意:没有最后的空字符,这就不是一个字符串,而是一个字符数组,所有未被初始化的元素都被自动初始化为空字符'\0'。

不要这样初始化字符串数组:

char dont [] = {'A','B','C'}

这样编译器会不知道从哪里停止,直到找到内存中最近的一个空字符,好在内存中空字符很多,不会花费太长时间。

二、字符数组

字符数组与字符串数组的最大区别是处理范围不同,字符串数组遇到空字符便结束,而字符数组可以根据编程者的需要控制处理的长度。但是和字符串数组一样的是,字符数组的最后一个字符也一定是空字符,如下的初始化无法通过编译:

char str4 [1] = {'A','B'}//错误:初始值设定太多

声明数组时(包含字符数组),数组大小必须是可求值的整数。在C99新增变长数组之前,数组的大小必须是整型常量,包括由整型常量组成的表达式。

int n = 8

char str5[2*sizeof(int)+1]//有效

char str6[n]//c99后有效的变长数组

在不越界的情况下,开发者可以根据需要编程处理字符数组。

与处理字符串不同,碰到空字符编译器会继续处理空字符后面的数据。

例如:

char str7 [3] = {'A','\0','C'}

str7[1] = 'B'