[英]How can array of arrays be used to store string of variable length in C language?
以下是我的代碼
int main(){
char *movies[500];
int i=0;
while(*(movies[i])!='$'){
scanf("%s",(movies[i]));
i++;
}
}
輸出是分段錯誤。 有人可以解釋一下嗎?
movies[i] = malloc(<size>);
在向每個指針寫入內容之前為每個指針分配內存。
您的指針movies[i]
沒有指向任何有效的內存位置,並且您嘗試寫入它將導致未定義的行為,從而導致崩潰。
一旦完成使用內存free()
它相應
首先,您沒有數組數組; 你有一個指針數組。 執行此操作時,必須隨時分配各個字符串。 如果你有一個數組數組,你會這樣聲明:
char movies[500][500]; // <<== Not recommended
但是,您的方法在內存方面更經濟。
其次,您的退出條件(用戶輸入$
作為電影名稱的第一個字符)將永遠不會成立,因為您總是在填充movies[i]
之前檢查該值。
以下是解決此問題的方法:
char buf[500];
int count = 0;
for (;;) {
scanf("%s", buf);
// Check exit condition here
if (buf[0] == '$') {
break;
}
// Make a copy
movies[count] = malloc(strlen(buf)+1);
strcpy(movies[count++], buf);
}
...
// Don't forget to free the strings that you allocated
for (int i = 0 ; i != count ; i++) {
free(movies[i]);
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.