C字符串中“0”,0和“\ 0”之间的差异

时间:2017-11-21 09:40:43

标签: c arrays pointers char printf

我在C中得到了这段代码,但我不明白为什么输出是:

输出:“地狱”

我希望它是“Hell00000000”而不是“Hell”。 能不能请说明为什么只有“地狱”?

char str[666];
char * x = str + 4;
strcpy ( str, "Hello world!" );

while ( *x )
 {
   *x ++ = 0;
 }
printf ( "%s", str );

3 个答案:

答案 0 :(得分:3)

\0 0 相同。两者都是nul字符数组的终止字符。

0 '0' 不同。第一个具有0秒的ascii代码,其ascii代码为48

在这里,你是非故意放置nul终止字符。这就是你Hell的原因。

如果您想获得结果Hell00000000

char str[666];
char * x = str + 4;
strcpy ( str, "Hello world!" );

while ( *x )
 {
   *x  = '0'; //<------This is different.
   x++;
 }
printf ( "%s", str );

答案 1 :(得分:2)

字符串中的值0不是有效字符(或者更准确地说,它是通常表示“无字符”的NUL字符)并用作结束标记C中的字符串。

您将其与'0'可打印字符)混淆,如果您使用的是基于ASCII的编码,则会为48

答案 2 :(得分:0)

您将其更改为0,即nul字符,等于'\0'。如果要将0添加为char,则必须使用'0'