为什么0会将其删除字符串的另一部分?

时间:2019-02-14 22:25:48

标签: c

我真的不明白为什么“ u'est”会被删除?

 int main()
{
 char dieser[15] = "Stan nu'est" ;
            dieser[6] = 0;
            printf(dieser);
return 0;
}

2 个答案:

答案 0 :(得分:1)

实际上,您的字符串并未真正删除。值0(或'\ 0')表示字符串的结尾。因此,在找到第一个0时,printf会停止打印您的字符串。 如果您更改代码,请执行以下操作:

int main()
{
 char dieser[15] = "Stan nu'est" ;
            dieser[6] = 0;
            printf(dieser);
            printf(&dieser[7]);
return 0;
}

您将在控制台中看到“ Stan n'est”。这意味着您的字符串继续在内存中,但是在字符串的第6位上您使用的是'\ 0'而不是'u'。

答案 1 :(得分:1)

写作时

dieser[6] = 0;

您正在为该字符分配值 0 。程序将字符串打印到屏幕时,此值映射到ASCII表。

如果您查看ASCII table,将会看到值为 0 的字符是NUL,它是空终止符。它指示字符串的结尾。

所以正在发生的事情是:您正在字符串中间插入一个字符串终止符。当 printf 函数读取字符串时,它将找到该字符并停止。这样才能得到切出的字符串。