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'