2012-11-26 119 views
0

那麼我有奇怪的問題printf()。它在屏幕上輸出垃圾。我猜想這與記憶有關。看一看:printf輸出垃圾而不是特定字符

char string1[] = "SAMPLE STRING"; 
char string2[20]; // some garbage in it 

/* let's clear this madness*/ 
int i = 0; 
for (i; i < 20; i++) string2[i] = ' '; // Space, why not. 

printf("output: %s", string2); 

輸出

output:  ╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠SAMPLE STRING 
// ten spaces and random characters, why? 
+0

你確定它不是* 20 *空格,然後是隨機字符嗎? –

回答

7

因爲C stri ngs需要被NUL終止。這意味着字符串的最後一個字符必須是'\0'。這是printf(和所有其他C字符串函數)如何知道字符串何時完成。

+1

實際上,它們是NUL終止的。 NUL是nul字符,NULL是nul指針。 – rodrigo

+0

我會寫這個爲「null-terminated」,而不是「NULL終止」,因爲NULL(全部大寫)是一個指針,所以它可能會令人困惑。 –

2

與空字符完成你的string2'\0'

string2[19] = '\0'; 

或者你可以這樣做:

for (i; i < 19; i++) string2[i] = ' '; 
string2[i] = '\0'; // after the end of the loop i= 19 here 
+3

你的意思是字符串[19],而不是字符串[20],對不對? –

+0

yap right。這是一個錯誤。答案已更新 – MOHAMED