所以,这是到目前为止困扰我的那一章
void CNCread(fPointer){
printf("\n");
fPointer = fopen ("CNCG.txt", "r");
char line[30];
while(!feof(fPointer)){
fgets( line, 150, fPointer);
puts(line);
}
fclose (fPointer);
return;
}
编译,运行和执行此函数后,我收到以下错误:
Parser.exe中0x00007FFCA1DEEAC5(ntdll.dll)抛出异常:0xC0000005:访问冲突读取位置0xFFFFFFFFFFFFFFFF。
我刚刚将这个项目从Code :: Blocks转换为Visual Studio 2015,添加了legacy_stdio_definitions.lib等等,所以这也不是问题,但是代码在code :: blocks下运行良好。 感谢大家提前。
答案 0 :(得分:0)
首先,char line[30]
可以包含最多30 char
个,但您尝试通过fgets( line, 150, fPointer);
向其中写入更多内容。
此外,您不会检查fopen
是成功还是失败。您还应该检查fgets
是成功还是失败。
此外,您可以在函数内声明fPointer
,而不是将其作为函数参数。它应该是FILE *
类型。
void CNCread(/* fPointer */){
printf("\n");
FILE *fPointer = fopen ("CNCG.txt", "r");
/* Check if fopen succeded */
if (fPointer == NULL) {
fprintf(stderr, "Error: Cannot open file to read\n");
/* Some code */
return;
}
char line[30];
while(!feof(fPointer)){
/* You are writing more chars to line than its capacity */
/* fgets( line, 150, fPointer); */
/* Change it to write at max 30 chars to line */
if (fgets( line, 30, fPointer) != NULL)
puts(line);
}
if (fclose(fPointer) == EOF) {
fprintf(stderr, "Error: Cannot close the file after reading\n");
/* Some code */
return;
}
return;
}