1

我正在尝试学习 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]);
}
4

2 回答 2

0

你怎么编译这个。编译器应该给你和分配错误:

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

数组wordlist不是类型char *

此外,您还缺少 malloc 的包含(可能是 stdlib.h),并且您不应该从 malloc 中转换返回值。

于 2013-05-01T02:43:45.117 回答
0

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

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

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

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

于 2013-05-01T02:47:09.390 回答