2017-06-28 80 views
0

這裏我想通過指向一個數組來保存輸入字符串,但是輸出將全部變爲最後插入的輸入。如何通過指向字符串數組保存輸入?

char **month; 
int row, col; 
int i, j; 
char name[10]; 

month = (char **)malloc(3*sizeof(char *)); 

for (int i = 0; i < 3; i++) 
{ 
    month[i] = (char *)malloc(10*sizeof(char)); 

    printf("Enter name\n"); 

    scanf("%s", name); 

    month[i] = name; 
} 

for (int i = 0; i < 3; i++) 
{ 
    printf("%s\n", month[i]); 
} 

return 0; 

任何想法如何解決它?

+1

[請參閱爲什麼不能投本討論返回值malloc()和家庭在C ..](https://stackoverflow.com/q/605845/2173917) –

+2

供參考:'sizeof(char)'總是1.此外,沒有真正的好處分配這麼小的記憶。只要用char char [3] [10]'去。 –

回答

2

這兩條線是有問題的:

month[i] = (char *)malloc(10*sizeof(char)); 
... 
month[i] = name; 

第一分配內存和使month[i]指向該存儲器。第二行重新指定month[i]以使其指向name。你失去了原來的內存(並有內存泄漏)。除了內存泄漏外,它還意味着month全部元素將指向相同的內存,它將包含最後一次輸入讀取。

而不是使用分配,你可以copy的字符串:

strcpy(month[i], name); 

或跳過臨時name變量,直接讀入month[i]

scanf("%9s", month[i]); 
相關問題