C语言中,关于字符串长度与字符数组长度的问题。

Char a[]={'a','b','c'};中为什么说数组长度是3,但字符串长度不确定呢?字符数组与字符串之间究竟是什么关系呢?

1楼正解,你在初始化时给数组a赋了3个值,所以其实a的类型应该是 char a[3],数组长度为3,。
字符串就不一样了,他必须以‘\0’结尾,你的 ‘a’ ‘b’ ‘c’存储在一个连续的地址上,字符串的长度是从‘a’的地址开始一直计数,当读到‘\0’时结束,虽然你没有用到‘c’后面的地址,但它会一直读下去并计数,如果‘c’后面的地址存的是‘\0’那长度就是3了,如果不是就一直往下读,所以说字符串的长度不确定
温馨提示:答案为网友推荐,仅供参考
第1个回答  2013-11-29
C语言中没有字符串类型,C风格字符串用字符数组来表示,并以‘\0’结束,与字符串操作相关的函数都要求被操作的字符串满足这一条件,你给出的字符数组没有最后的空字符,也就是说编译器没有一个标志可以让它结束对这个字符串的长度的求解,所以不确定,数组长度为3是因为只有3个元素,如果你这样初始化:char a[] = "abc",编译器会自动给你加一个空字符,这样字符串长度就能确定为3了(确定字符串长度时编译器忽略最后的空字符)
第2个回答  推荐于2017-10-14
数组长度指的是数组的元素个数,字符串长度是以‘\0’为标志来确定的,举个例子:
char a[20]="abc";
数组长度是20,而字符串长度是3,隐含的'\0'不算在字符串长度中。本回答被网友采纳
第3个回答  2013-11-29
Char a[]={'a','b','c'};按数组来说已经初始化了3个char类型,分配了3个char大小空间,而如果作为字符串,内存空间给字符指针a只指定了三个连续的char大小的空间,然后a[2]后面的内存块空间储存的到底是什么内容就是随机的了,而字符串以 '\0' 结尾,后面具体哪个是 '\0'完全不确定 ,所以字符串的长度无法确定
第4个回答  2013-11-29
C语言约定字符串以 '\0' 结尾,上述数组末尾没有 '\0' ,所以字符串的长度无法确定。
相似回答