【发布时间】:2018-03-16 23:24:35
【问题描述】:
我正在尝试开发一个函数来读取文本文件的每一行并将它们存储在字符串数组中(char**),但 fgets() 似乎不起作用,它总是返回一个空字符。
这里是函数
char** getLines(FILE* fp){
char** lines;
int numberOfLines; //number of lines int the file
char ch; //aux var
int i; //counter
while(!feof(fp)){
ch = fgetc(fp);
if( ch == '\n'){
numberOfLines++;
}
}
lines = malloc(numberOfLines*sizeof(char*));
if (lines==NULL){
fprintf(stderr,"Error, malloc failed");
exit(1);
}
for(i = 0; i<numberOfLines; i++){
lines[i] = malloc(MAX_LENGTH*sizeof(char)); //MAX_LENGTH = 128
}
i=0;
while(fgets(lines[i], MAX_LENGTH,fp)){
printf("Line %d: %s \n",i,lines[i]);
i++;
}
return lines;
}
该函数永远不会进入 while 循环,因此它不会打印任何内容 我也在使用一个非常简单的输入文件:
test line 1
test line 2
test line 3
test line 4
希望你能帮助我, 提前谢谢你。
【问题讨论】:
-
我读的是
MAX_LENGHT而不是MAX_LENGTH吗? -
C 或 C++ - 选择一个。你的代码看起来像 C。
-
我建议你花一些时间阅读Why is “while ( !feof (file) )” always wrong? 还要注意
fgetc返回一个int。 -
至于你的问题,检查行数后想想文件指针在哪里。要是有办法让rewind文件指针重新开始就好了……
-
您在致电
fgets之前阅读了整个文件。所以当然它不是在读任何东西。没有什么可读的了。您应该修复您的代码以在读取行时根据需要动态增长行数组,并且只尝试读取一次文件。