我正在用 c 中的回圈進行測驗,我偶然發現了一篇關于回圈 ( for(foo = bar; *foo; foo )) 中的指標的帖子。
我嘗試用這些知識進行測驗,并做到了:
int main() {
char a[9] = "test test";
char *b;
for(b = a; *b; b )
printf("%c", *b);
return 0;
}
我編譯了這個 ( gcc test.c),然后運行它并得到以下輸出:test test? aest test? ast test§ at test? a test? atest↑ aest↓ ast→ ata∟ a aa
我改為char a[9],char a[10]假設它與 有關系\0,然后得到test testest testst testt test testtesteststt.
為什么會這樣?我認為這個回圈會在 9 個周期后結束,因為提供的字串中有 9 個字符。
uj5u.com熱心網友回復:
你的問題在這里
char a[9] = "test test";
"test test"因為 ac 字串占用 10 個位元組:9 個用于字符,1 個用于終止'\0'字符。
做:
char a[] = "test test";
IE。讓編譯器計算出字串占用多少記憶體。
為什么這是一個問題?
因為 C 運行時在看到'\0'字符時會檢測到字串的結尾。你還沒有,所以運行時代碼在字串的末尾運行并一直運行,直到它遇到一個'\0'
你也應該做
printf("%s\n", b);
這樣每個回圈都列印在一行上。不這樣做printf(<string>)是自找麻煩
好的,下一個問題是 - 為什么它不只是 print "test test"。
char a[9] = "test test";
char *b;
for(b = a; *b; b )
printf("%s\n",b);
return 0;
讓我們做第一個回圈。在列印宣告中:
b'T'是指向字串中第一個字符的指標printf("%s\n", b)將列印從該點開始的字串,即"Test Test"
第二個回圈,同一個地方
b現在指向'e'角色printf("%s\n", b)將列印從該點開始的字串,即"est Test"
第三
b現在指向's'角色printf("%s\n", b)將列印從該點開始的字串,即"st Test"
全清?
如果你想通過 char 列印字串 char 做
char a[9] = "test test";
char *b;
for (b = a; *b; b )
printf("%c\n", *b);
return 0;
那printf就是說'列印一個字符,b指向的字符。
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/430170.html
下一篇:矩陣中出現頻率最高的元素
