2011-11-30 100 views
1

我想定義一個包含指向字符串的字符指針的動態數組。字符串可以是任意長度的,所以我使用了char指針。我想在每次需要存儲更多值時動態調整數組的大小。下面的代碼給我分段錯誤。我做得好嗎?char指針的動態數組

int main() { 
    char **input=NULL; 
    char *buffer; 

    int i=0; 

    do { 
     input = (char **)realloc(input, (i+1) * sizeof(char *)); 

     scanf("%s", &buffer); 
     strcpy(input[i++],buffer); 

    } while(strlen(buffer)!=0); 


} 

回答

0

您的緩衝區和您的輸入[i]未分配。

8

您的代碼有多個問題。它不會工作,直到你修復所有這些問題

  • 你沒有爲buffer分配內存。 SCANF會寫在稀薄的空氣,如果沒有下一個點,這可以說是比較嚴重的
  • 你應該通過buffer到SCANF,&buffer
  • 你是不是爲input[i]分配內存。您只爲input分配 內存。
1

緩衝區未初始化。除了&緩衝區是一個指向指針的指針,而不是你想要的字符數組。

1

問題是您將buffer定義爲一個指針,但是您沒有將它指向可以保存掃描字符串的東西,所以scanf在未分配的內存中寫出來,這非常糟糕。您也不會分配input[i],因此strcpy也會失敗。您可能要改變,要使用strdup代替:

input[i++] = strdup(buffer); 

另外一對夫婦挑剔的:當一個字符串進行掃描時,你不需要在字符串緩衝區的&,所以重做這樣的:

scanf("%s", buffer); 

,你不應該投的realloc(或malloc要麼爲此事)結果:

input = realloc(input, (i+1) * sizeof(char *)); 
1

除在其他的答案已經列出的問題,循環不會終止爲:

scanf("%s", buffer); 

不會返回,直到它讀取至少一個字符,不包括行結束字符。