2017-10-17 51 views
-1

我正在爲我的測試而學習,並且遇到了一個體面結果奇怪的代碼。我明白main()中前兩行的結果,但我不明白爲什麼我的電腦會打印出像圖片這樣的答案!爲什麼最後的代碼返回這樣的結果? (在C)

什麼是s [%d]在那裏做? result of the code

#include <stdio.h> 

void printstring(char s[]) { 
    int i; 

    for (i = 0; i < 10; i++) 
     printf(" s[%d]", i); 
    printf("\n"); 

    for (i = 0; i < 10; i++) 
     printf("%5c", s[i]); 
    printf("\n"); 

    for (i = 0; i < 10; i++) 
     printf("%5X", s[i]); 
    printf("\n"); 
    printf("\n"); 
} 

main() { 
    printstring("I am beautiful"); 
    printstring("beautiful"); 
    printstring(""); 
} 
+4

您通過訪問字符串的實際長度來調用*未定義的行爲 – UnholySheep

+0

我對C完全陌生,所以我不確定爲什麼它是未定義的行爲。 –

+2

「美麗」裏有幾個字符? ''「'中有多少個?當你走出數組的邊界(和字符串*是數組)時,你會怎麼想? –

回答

1

因爲在C列/ C++有沒有明確的邊界,在PRINTSTRING的第三呼叫,陣列s是一個零長度字符數組。當解引用值使用下標0..10時,它指內存中的隨機存儲器,其值取決於編譯器以及它生成的目標文件的結構。在你的情況下,字符串「s [%d]」就在s所指的3個字節的地方。

相關問題