0

有人可以解释一下为什么不能'\0'在给定的数组中放置一个字符:

char a[]={'r','b'};

a[2]='\0';

上面的代码不应该在第三个插槽中放置一个空字符,从而将字符数组 a 转换为字符串。

4

3 回答 3

8

您正在写超出数组边界:当您用两个字符初始化数组时,最后一个有效索引是1,而不是2

您应该使用三个项目初始化数组,如下所示:

char a[] = {'r', 'b', '\0'};

你也可以使用这个版本:

char a[] = "rb";

这将为您提供一个可写数组,其中包含一个以零结尾的字符串。

于 2012-05-19T02:48:55.657 回答
1

C 中的字符串以字符数组的形式实现,并以 null '\0' 结尾。就说吧 char* a = "rb";。(记得包含 string.h)

于 2012-05-19T02:51:01.303 回答
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

于 2012-05-19T03:08:10.343 回答