有人可以解释一下为什么不能'\0'
在给定的数组中放置一个字符:
char a[]={'r','b'};
a[2]='\0';
上面的代码不应该在第三个插槽中放置一个空字符,从而将字符数组 a 转换为字符串。
有人可以解释一下为什么不能'\0'
在给定的数组中放置一个字符:
char a[]={'r','b'};
a[2]='\0';
上面的代码不应该在第三个插槽中放置一个空字符,从而将字符数组 a 转换为字符串。
您正在写超出数组边界:当您用两个字符初始化数组时,最后一个有效索引是1
,而不是2
。
您应该使用三个项目初始化数组,如下所示:
char a[] = {'r', 'b', '\0'};
你也可以使用这个版本:
char a[] = "rb";
这将为您提供一个可写数组,其中包含一个以零结尾的字符串。
C 中的字符串以字符数组的形式实现,并以 null '\0' 结尾。就说吧 char* a = "rb";
。(记得包含 string.h)
虽然 TeoUltimus 的答案是正确的,但请注意,在他的情况下,指针 'a' 将指向字符串文字。这意味着您永远不能修改字符串。更具体地说,虽然代码a[1] = 'c';
会编译,但运行它会导致错误。char a[] = "ab"
如果您打算修改字符串中的各个元素,请写下。详情见:https ://www.securecoding.cert.org/confluence/display/seccode/STR30-C.+Do+not+attempt+to+modify+string+literals