[英]Two dimensional string array in C
我想用C語言迭代下面的2d字符串數組; 這是迭代的代碼:
char list [][] ={{"dan","1"},{"sara","2"},{"loura","3"}};
for(i=0; i < 3;i++){
for(j=0; j < 2;j++){
if(strcmp(list[i][0],data)==0)
{
/*some code*/
}
}//end column
}// end row for
我收到很多警告,比如“數組類型有不完整的元素類型”。 我認為問題出在2d數組中。 我嘗試了其他初始化方式:
char **list[][]=......
但那也不起作用。
你應該這樣宣布它
char list[][2][6] = {{"dan", "1"}, {"sara", "2"}, {"loura", "3"}};
char
數組。 你只有2對[]
。 char[3][2][6]
也不會有什么壞處。 "loura"
加上空終止char
if(strcmp(list[i][0],data)==0)
應該
if(strcmp(list[i],data)==0)
您需要字符串的地址,而不是第一個元素。
根據你的評論,數組永遠不會改變,你應該讓它保持不變。 還可以使用指向條目的指針。 后者避免了提供最大值的需要。 每個“字符串”的字符大小,避免空間縮小:
const char * const list[][2] = { { "...", "..." } , ... };
這是一個指向char
的2D數組。 初始化器將設置指向初始化器中給出的字符串文字的指針。 這是您可以獲得的最舒適(在自動內存空間大小的意義上)。 編譯器可以通過初始化器中的對數推導出外(最左邊!)維。 對於內部維度,您必須指定。 字符串文字的大小與數組無關,因為我們使用指針(數據不存儲在數組本身中)。
第一個const
告訴編譯器指向的對象不會被修改。 第二個對指針本身說明相同(這意味着整個數組不會被修改)。
有了這個,您可以使用您在問題中使用的strcmp
:
strcmp(list[i][0], data)
確保data
始終正確終止(即結尾處為'\\0'
)。
更新:根據您的編輯,您希望以數字形式訪問第二個條目。 也許整數會比字符串更好。 為此,您需要一個struct
一維數組:
const struct {
const char *name;
int number;
} list[] = { { .name = "name", .number = 15 } , ... };
( .name =
/ .number =
部分是指定的初始化者;自C99以來的標准。)
用法:
strcmp(list[i].name, data)
int my_number = list[i].number;
這樣,您可以更輕松地處理整數部分,並且可以更輕松地命名兩個條目。 即使你仍然使用兩個字符串,這可能是更好的方法,因為只有當所有條目具有相同的語義時才應該使用數組,否則struct
將更合適。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.