簡體   English   中英

如何使用數組數組來存儲C語言中可變長度的字符串?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM