C中的数组初始化

时间:2012-05-19 02:46:43

标签: c

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

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

a[2]='\0';

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

3 个答案:

答案 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