我正在尝试学习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]);
}
答案 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 - 并丢弃其他字符?