2014-03-03 142 views
1

我只是自己做一些額外的工作,試圖更好地掌握C中的多維字符串數組,例如數組[3] [5] = {「apple」, 「房子」, 「卡車」}。我有一個測試文件,裏面填充了很多不同長度的單詞,並且想用這些不同的單詞填充字符串數組。我使用動態分配來提供內存空間,打開文件以及使用fgets來獲取每個單詞,因爲每個單詞都在一個新的行中。我將這個單詞保存到數組中的新位置,然後打印它以檢查它是否已保存。他們應該打印字樣,這讓我相信他們正在被儲存,但是然後我得到了一個seg故障。任何人都可以向我解釋爲什麼發生這種情況?C多維字符串數組在C

文本文件和形式I具有它的樣品中是(無字之間的空行:

魅力

女巫

附魔

濫用

Mitch

Mitc地獄

斜切

減輕

減輕

減輕

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

#define WORDS 50 
#define LETTERS 15 

int main(int argc, char *argv[]) { 

int i; 
char **array; 
FILE *file1; 
char string[15]; 

array=(char **)malloc(LETTERS*sizeof(char*)); 

for (i=0;i<WORDS;i++) { 
    array[i]=(char *)malloc(LETTERS*sizeof(char)); 
} 

if (argc != 2) { 
    printf("\nERROR: Wrong number of arguments entered\n"); 
    return -1; 
} 

file1=fopen(argv[1],"r"); 

if (file1==NULL) { 

    printf("\nERROR: File 1 not found\n"); 
    return -1; 
} 

for (i=0;i<=WORDS;i++) { 
    fgets(string,LETTERS,file1); 
    array[i][0]=*string; 
    printf("%s",string); 
} 

return 0; 

} 
+1

'陣列[I] [0] = *串;''到的strcpy(陣列[I]中,字符串);'。 – chux

+0

僅供參考 - [我投出malloc的結果嗎?](http://stackoverflow.com/questions/605845/do-i-cast-the-result-of-malloc) – crashmstr

回答

0

從你的榜樣,您需要分配至少6個字符爲每個字符串,否則你會丟棄終端空字符。

0

動態內存分配在你的代碼中是錯誤的。

,而不是這個代碼array=(char **)malloc(LETTERS*sizeof(char*));替換下面的代碼

array=(char **)malloc(WORDS*sizeof(char *)); 
for(i=0;i<WORDS;i++) 
array[i]=(char *)malloc(LETTERS*sizeof(char)); 

從文件還需要修改讀取數據。

,而不是這個代碼for (i=0;i<=WORDS;i++) { fgets(string,LETTERS,file1); array[i][0]=*string; printf("%s",string); }

替換下面的代碼

i=0; 
while(fgets(string,LETTERS,file1)!=NULL){ 
strcpy(array[i],string); 
printf("%s",string); 
i++; 
} 

現在i共持有字符串從文件中讀取的值。 有關打印陣列的內容

int j; 
for(j=0;j<i;j++) 
printf("%s",array[j]); 
+0

不要投出malloc的結果 – zoska