2016-02-19 55 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()字符串的末尾在哪裏。