2012-05-19 199 views
0

能有人请解释我为什么它不可能把一个'\0'字符的给定数组中:阵列初始化

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

a[2]='\0'; 

应该不是上面的代码放在一个空字符在第三位,因此转换字符数组a到字符串。

+0

您可以采用'char a [3] = {'r','b'};'并且您有足够的定义内存来放置[2]。 – user411313

+0

约翰纳什问这样的基本问题? naaaahhhh .. /) –

+0

仍在学习C。 –

回答

8

您正在写入阵列边界之后:当您使用两个字符初始化阵列时,最后一个有效索引是1,而不是2

你应该有三个项目初始化数组,如下所示:

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

你还可使用此版本:

char a[] = "rb"; 

这会给你一个零阵列终止的字符串里面。

+0

是的,这是有道理的。感谢您的及时回复。 –

+0

因为我是新手,可以帮我找到接受按钮。谢谢。 –

+0

@JohnNash答案旁边有复选标记的轮廓。 – dasblinkenlight

1

C中的字符串被实现为一个字符数组,并以空值'\ 0'结尾。只要说char* a = "rb";。 (记得包含string.h)

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

+0

谢谢,这当然有帮助! –