printf是否以null字符终止每个字符串?

时间:2016-02-19 06:17:00

标签: c

我们的声明如下─ printf(" Hello World"); printf在' d'之后附加一个空字符。在给定的字符串中?

3 个答案:

答案 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。如果传递的字符串未终止,则行为未定义。