下面顯示的代碼旨在首先處理字符串p的內容,然後打印其內容。我使用兩個while循環和一個printf語句測試了代碼。c中的初始化字符串給出奇怪的輸出
#include <stdio.h>
#include <string.h>
int main(void) {
char p[10] = "Hello";
char *a = p;
while(*a++)
;
*a++ = '1';
*a++ = '\0';
a = p;
int i;
for(i = 0; i < 10; i++)
putchar(a[i]);
putchar('\n');
for(i = 0; i < 10; i++)
putchar(p[i]);
putchar('\n');
printf("%s\n", p);
return 0;
}
輸出:
[email protected]:~$ gcc -o test test.c
[email protected]:~$ ./test
Hello1
Hello1
Hello
現在,我在我的兩分的問題,首先,要被打印的7個字符(包括NULL)後顯示在頭兩行中的所有垃圾值。其次,爲什麼printf語句的輸出是'Hello',而應該是'Hello1'?
沒有,那就是**完全錯誤**很顯然你不明白的代碼應該做的。如果你在'while'後面去掉分號,它會用'1'來填充所有的字符串。這不是OP想要的。 –
@ user3477950你的結論是什麼?** OP想要什麼樣的垃圾? – SomeWittyUsername
這不是垃圾。你的答案不回答第一部分,它回答第二部分。 (順便說一句,關於我的結論:經驗,我看到很多人提出與此相同的問題,並且他們總是毫無例外地毫無例外地尋找「垃圾」,因爲缺乏初始化,這是一種神話。) –