我只是想知道你能否爲我清理一些東西。c的printf函數如何在沒有 0的情況下知道如何停止?
讓我們有一些示例代碼來說明我的問題:
#include <stdio.h>
int main(void)
{
char test[100];
printf("%s",test);
return 0;
}
如果我沒有完全搞錯了,這應該輸出隨機要麼某些字符在這個內存地址之前,我宣佈它還是什麼,如果它是像在虛擬環境中一樣空虛。所以,這是我的理解。在我把東西放入之前的記憶被理解爲一個字符並寫入終端。例如ascii'a'= 97 = 01100001.這就是爲什麼它輸出'a'。可能是其他任何東西。或無。然後停止。
但如果我把在第一位置「A」,然後打印它像這樣:
test[0] = 'a'
printf("%s",test);
它將輸出「a」和另外給一些字符或什麼,然後停止。
這是我的理解陣列:一種陣列是一個指向第一個地址和括號內是所述地址的解引用添加次數的sizeof(類型)到它之後。
因此,在這種情況下,第一個例子中在內存中找到的隨機01100001(Ascii'a')應該與第二個例子中故意放置的01100001(Ascii'a')的printf不可區分。然而,當我運行printf時,我不會得到100個隨機輸出。我得到一個。而且我不假定隨機字段通常設置爲'\ 0'。
這意味着,我的理解一定是錯誤的地方。請幫助我瞭解我犯了我的錯誤。
看起來像「未定義的行爲」將是你的發現的好名字。 – usr2564301
的可能的複製[什麼時候的printf( 「%S」,字符\ *)停止打印?](http://stackoverflow.com/questions/2726301/when-does-printfs-char-stop-printing) –
「如何c的printf函數知道如何停止沒有\ 0?「 - >'test [100]'沒有被初始化。所以它可以有一個'\ 0'。我們不知道它是「沒有\ 0」。 – chux