2013-05-01 58 views
1

我想學習C,並且似乎無法弄清楚如何從字符串中讀取字符串到數組中。我有一個字符串數組的二維數組字符串,並試圖通過使用malloc來讀取這些字符串,但我一直在收到一個SegFault。有關如何修復我的代碼的任何提示?從字符串中讀取字符串到C中的動態分配數組中

#include <stdio.h> 
#define MAX_WORDS 10 
#define MAX_WORD_SIZE 20 

unsigned int getLine(char s[], unsigned int uint, FILE *stream); 

int main(void){ 

FILE *infile1; 
unsigned int i = 0; 
unsigned int j = 0; 
unsigned int index; 
char c; 

char wordList[ MAX_WORDS+1 ][ MAX_WORD_SIZE + 1]; 

infile1 = fopen("myFile.txt", "r"); 


if (!(infile1 == NULL)) 
printf("fopen1 was successful!\n"); 


while((c = getc(infile1)) != EOF){ 
    while ((c = getc(infile1)) != ' '){ 
    wordList[i] = (char *)malloc(sizeof(char)); 
     wordList[i][j] = getc(infile1); 
     j++; 
    } 
    j = 0; 
    i++; 
} 


printf("\nThe words:\n"); 
for (index = 0; index < i; ++index){ 
printf("%s\n", wordList[index]); 
} 

回答

0

你是如何編譯這個的。編譯器應該給你和錯誤的賦值:

wordList[i] = (char *)malloc(sizeof(char)); 

數組wordlist的類型是char *

而且你缺少一個包括的malloc不(stdlib.h中可能),你不應該從malloc投射返回。

+0

關於stdlib.h你說得對。這有幫助。我知道malloc是錯誤的,但我不知道如何使用它。 – Johnny 2013-05-01 03:09:33

0

一個明顯的問題 - 您爲wordList [i]分配一個字符,然後像使用每個wordList [i] [j]的字符一樣使用它。

您不需要在此分配任何內存,因爲您已將wordlist定義爲2維數組而不是指針數組或類似數組。

下一個明顯的問題 - 你正在閱讀的字符,並沒有提供字符串的結束,所以如果你有到最後的printf(),你將繼續前進,直到碰巧有一個0的地方或在wordList [index]之後 - 或運行內存結束時,使用Segfault。

下一個問題 - 你是否打算在閱讀一個空間後立即檢測EOF - 並扔掉替代字符?

+0

擺脫了malloc,並添加在一行中,以0結尾的單詞。不知道如何解決你提到的最後一個問題。 ((c = getc(infile1))!= EOF){ while((c = getc(infile1))!='')if((c = getc(infile1))= EOF){ { wordList [i] [j + 1] ='0'; return 0; \t \t} \t wordList [i] [j] = getc(infile1); \t j ++; } wordList [i] [j + 1] ='0'; j = 0; i ++; '}' – Johnny 2013-05-01 02:57:26

+0

'而((C = GETC(infile1))!= EOF){ 而((C = GETC(infile1))!='「){ \t單詞表[i] [j] = getc(infile1); \t j ++; } wordList [i] [j + 1] ='0'; j = 0; i ++; }' – Johnny 2013-05-01 03:04:05

相關問題