2017-04-24 60 views
0

我希望將n個單詞存儲到一個數組中。我在下面的代碼中使用了指針來做到這一點。但問題是,一旦讀取了所有單詞,這些單詞就無法打印。如何使用動態stirng陣列c

請提供任何解決方案。

#include <stdio.h> 
#include <stdlib.h> 

int main() { 

    char buff[10]; 
    int i,T; 
    printf("Enter the no.of words:"); 
    scanf("%d",&T); 

    char **word= malloc(10*T); 
    printf("Enter the words:\n"); 
    for(i=0;i<T ;i++){ 
     scanf("%s",buff); 
     word[i]= malloc(sizeof(char)*10); 
     word[i]=buff; 
     printf("u entered %s\n",word[i]); 
     if(i>0) 
      printf("u entered %s\n",word[i-1]); 
    } 

    printf("Entered words are:\n"); 
    for(i=0;i<T ;i++) 
     printf("%s\n",word[i]); 


} 
+0

問題是你正在爲每個數組元素存儲* same *'buff'指針。這顯然意味着它們都包含相同的值,並且隨着'malloc'緩衝區丟失而導致內存泄漏。使用'strcpy'或'strdup'。 – kaylum

回答

5

您需要分配的char *大小 -

char **word= malloc(sizeof(char *)*T); 

並複製你需要使用strcpy字符串。因此,而不是這個 -

word[i]=buff;   // 1 

使用本 -

strcpy(word[i],buff);   // include string.h header 

通過1.您指向buff使用指針,但存儲在buff的值發生變化。因此,所有指針指向的值都是相同的,並且您獲得所有相同的輸出,即存儲在buff中的最新值。

+0

非常感謝你的答案。 – kilowatt

+0

@ kilowatt很高興它已經打開。 – ameyCU