你的代碼有幾個錯誤。首先用分號結尾的if
或for
結構是在C中啓動時常見的錯誤。基本上它會創建一個空的if
語句,後面跟着一個代碼塊。看看這樣說:
if (condition)
; // Does nothing. The if is empty
// Totally unrelated block of code.
{
}
代碼塊通常是創建範圍,所以雖然它似乎沒有用編譯器以這種方式解讀塊有用的,但實際上並非如此。這也發生在其他情況下,如while
,for
,等等:
for (int i=0 ; i<n ; ++i)
; // Empty for. Runs `n` loops, but doing nothing
// Unrelated block of code. Runs only once
{
}
的比較操作也是錯誤的,你應該使用==
的比較,而不是=
,其中用於分配。
最後,你不能以這種方式比較字符串。字符串基本上是數組,而數組又是用指針表示的。如果您比較兩個指針(ptr1 == ptr2
),它只會檢查兩個字符串是否指向內存中的相同地址。由於字符串由幾個字符組成,因此必須迭代才能正確比較。幸運的是,標準庫已經爲此提供了一種方法。
修正了一個或兩個錯字,這是你會得到什麼:
char *names[50][32];
char *states[50][2];
i = 0; // Assuming this is declared somewhere else
while (i < b) {
if (strcmp(states[i], "tx") == 0) {
printf("a string %s\n", names[i]);
}
i = i + 1;
}
你或許應該同時檢查文檔爲strcmp。
編輯:因爲這已經是公認的答案,所以我還應該包含一個修正,如@dbush所述。統計數組顯然缺少額外字符串終止符的空間,因爲字符串是以C終止的NULL
。名稱數組可能會也可能不會遇到同一問題,但尚不清楚。無論如何,值得注意的是,兩者都應該包含一個額外的字節來存儲終止符:
char names[50][33];
char states[50][3];
支持@dbush。
提示:什麼是',''中如果(狀態[i] = 「TX」); {'怎麼辦? –
此代碼不能編譯。沒有聲明'狀態'。 –
另外'='運算符是賦值而不是比較 –