有人可以解释一下为什么不能在给定数组中放置'\0'
字符:
char a[]={'r','b'};
a[2]='\0';
上面的代码不应该在第三个插槽中放置一个空字符,因此将字符数组a转换为字符串。
答案 0 :(得分:8)
您正在编写数组边界:当您使用两个字符初始化数组时,最后一个有效索引为1
,而不是2
。
您应该使用以下三个项初始化数组:
char a[] = {'r', 'b', '\0'};
你也可以使用这个版本:
char a[] = "rb";
这将为您提供一个可写数组,其中包含一个以零结尾的字符串。
答案 1 :(得分:1)
C中的字符串实现为字符数组,并以null'\ 0'结尾。只需说char* a = "rb";
。 (记得要包含string.h)
答案 2 :(得分:0)
虽然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