我们的声明如下─ printf(" Hello World"); printf在' d'之后附加一个空字符。在给定的字符串中?
答案 0 :(得分:3)
写作时
printf("xyz");
您实际上是将包含三个字符和空终结符的字符串传递给printf
。
printf("xyz");
// is equivalent to
static const char xyz[] = { 'x', 'y', 'z', 0 };
printf(xyz);
两个printf
具有相同的效果:它们将字符x,y和z写入控制台。没有写入null终止符。
答案 1 :(得分:1)
试试这个:
#include <stdio.h>
int main()
{
char string0[] = {'a', 'b', 'c'};
char string1[] = {'a', 'b', 'c','\0'};
printf("%s", string0);
puts("");
printf("%s", string1);
return 0;
}
如果你足够幸运,你会看到类似的东西:
abc$#r4%&^3
abc
printf()
不会在字符串中添加'\0'
。它不会对要输出的字符串进行任何更改,因为它的任务是打印&#34;而不是&#34;修改&#34;。 相反,它是空字符,告诉printf()
字符串的结尾在哪里。
答案 2 :(得分:0)
定义字符串时,例如“hello world”默认为空终止。 printf没有任何与null终止有关的东西,期望它自己的打印处理。它只接受char *作为输入。在您的示例中,“Hello World”是临时字符串,并且在传递给printf之前已经终止了null。如果传递的字符串未终止,则行为未定义。