我正在尝试从文件中读取和编写简单的Infix和Postfix表达式。当程序到达调用fgets的行时,会弹出Access Violation错误。
代码:
#include <stdio.h>
#include <stdlib.h>
#include "header3.h"
char inFx[100], postFx[100];
int main() {
FILE *fp = fopen_s(&fp, "input.txt", "r");
remove("output.txt");
FILE *fp2 = fopen_s(&fp2, "output.txt", "a");
if (fp == 0)
{
printf("Could not open file\n");
}
else
{
int i = 0;
while (fgets(inFx, sizeof(inFx), fp)) { //access violation during runtime here
size_t ln = strlen(inFx);
int n = expEvaluate(inFx, ln, postFx); //refers to other class
if (inFx[ln] == '\n')
inFx[ln] = '\0';
if (fp2 == 0)
{
printf("Could not open file\n");
}
else
{
while (*(postFx + i) != 0)
{
fputc(*(postFx + i++), fp2);
}
fputc('\n', fp2);
}
}
}
fclose(fp2);
fclose(fp);
return 0;
}
答案 0 :(得分:0)
fopen_s()
返回错误代码,而不是文件句柄(分配给第一个参数)。
答案 1 :(得分:0)
您不应该将fopen_s
的结果输入到FILE指针中。
此外,您应该在循环之前将测试放在fp2
上。如果您无法打开文件,那么您将阅读整个文件fp
,但您不会做任何事情。