将文件中的字符串读入C中的动态分配数组

时间:2013-05-01 02:33:35

标签: c malloc fopen

我正在尝试学习C,似乎无法弄清楚如何将文件中的字符串读入数组。我有一个字符串数组的二维数组,并尝试通过使用malloc读取它们,但我不断得到一个SegFault。有关如何修复代码的任何提示?

#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]);
}

2 个答案:

答案 0 :(得分:0)

你是如何编译的?编译器应该给你和错误的分配:

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

数组wordlist的类型不是char *

此外,您缺少malloc的include(可能是stdlib.h),您不应该从malloc转换返回。

答案 1 :(得分:0)

一个明显的问题 - 你为wordList [i]分配了一个char,然后使用它就好像你有一个字符为每个wordList [i] [j]。

您不需要在此处分配任何内存,因为您已将wordlist定义为二维数组而不是指针数组或类似数组。

下一个明显的问题 - 你正在阅读字符并且从不提供字符串的结尾,所以如果你最后到达printf(),你将继续前进,直到在某处或之后的某个地方碰巧出现0 wordList [index] - 或使用Segfault运行内存的末尾。

下一个问题 - 您是否打算在读取空格后立即检测EOF - 并丢弃其他字符?