2016-02-19 58 views

回答

0

当一个字符串被定义为例如“hello world”默认为空终止。 printf没有做任何与null终止相关的工作,期望它自己的打印处理。它只接受char *作为输入。在你的例子中,“Hello World”是临时字符串,在传递给printf之前已经终止了null。如果传递的字符串不是空的,那么行为是未定义的。

3

当你写

printf("xyz"); 

你实际上是通过由三个字符的字符串和空终止于printf

printf("xyz"); 
// is equivalent to 
static const char xyz[] = { 'x', 'y', 'z', 0 }; 
printf(xyz); 

这两个printf都具有相同的效果:它们将字符x,y和z写入控制台。空终止符不被写入。

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'不追加到字符串。它不会更改要输出的字符串,因为它的任务是“打印”而不是“修改”。 相反,空字符告诉printf()字符串的末尾在哪里。