【发布时间】:2018-11-27 04:22:35
【问题描述】:
我有以下代码:
void readFile(FILE* fp)
{
int lines = 4;
char* line = (char*)malloc(sizeof(char)*100);
int i;
for(i = 0; i < lines; i++)
{
if(fgets(line, 100, fp)!=NULL)
{
printf("\n FGETS NOT NULL \n");
printf("%s\n", line);
}
}
free(line);
}
int main(int argc, char** argv)
{
FILE* fp = fopen("t.txt", "r");
if(fp==NULL)
{
printf("Error.\n");
exit(0);
}
readFile(fp);
return 0;
}
我传递给函数的文件包含:
add $s0 $s1 $s2
sub $s2 $s3 $s6
addi $s2 $s3 15
haltSim
我没有得到任何输出。出于某种原因,fgets 总是返回 NULL。任何帮助将不胜感激!
【问题讨论】:
-
fopen("t.txt", "r");是成功还是失败?你怎么知道的? (提示:if (fp == NULL) { perror ("fopen-t.txt"); return 1; }-- 然后是readFile(fp);) -
@DavidC.Rankin 我忘了在此处编写代码时包含检查。已编辑。据我所知,没有错误。
-
好的,这就是像拇指酸痛一样突出的东西。除了更好地使用固定缓冲区(例如
char line[100];而不是分配)之外,您对fgets的使用没有什么明显的。使用您的代码和数据文件,我得到"FGETS NOT NULL\nadd $s0 $s1 $s2...."。 -
char* line = (char*)malloc(sizeof(char)*100);最好写成char *line = malloc(100);。强制转换是不必要的(并且在某些情况下可以掩盖错误),sizeof (char)根据定义为 1。或者只是char line[100;。 -
在对其中一个答案的评论中,您写道:“代码是一个更小的 [更大?] 项目的一部分(readFile 实际上解析输入并从中创建一个结构,但我“所以问题中的程序没有出现问题——你没有告诉我们。问题在于您没有向我们展示的代码。