使用fscanf()读取文件时触发Access Violation异常问题求助
读取文件内容到数组时触发Access Violation异常的问题
我尝试读取一个包含三行文本的文件,并将内容存储到数组中,这本该是简单操作,但始终触发「Exception: Access Violation」异常。
我使用Windows 11系统和Pelles C编译器,已经13年没接触C语言,连编译代码都费了很大功夫,难以自行排查问题。
初始代码
#include <stdio.h> int main(void) { FILE *fp; fp = fopen("Data", "r"); char *str_read[3]; int i; for (i = 0; i < 3; i++){ fscanf(fp, "%s", &str_read[i]); printf("%s\n", str_read[i]); } fclose(fp); return 0; }
我期望输出「Data」文件里的三行文本。如果去掉fscanf()并手动设置str_read的内容,代码能正常运行,因此确定问题出在第9行。我觉得变量传递形式正确,但也尝试了各种&和*前缀的组合,避免语法理解错误。
错误信息
执行代码时报错:
CRT: unhandled exception (main) -- terminating
*** Process returned 255 ***
调试时也会出现上述异常。
修改后的代码(已解决)
我根据收到的解答修改了代码,当前代码足以满足需求:
#include <stdio.h> #define BUFLEN 80 int main(void) { FILE *fp; if ((fp = fopen("Data", "r")) == NULL) { perror("fopen failed"); return 1; } char str_read[3][BUFLEN]; for (int i=0; i<3; i++) { if (fgets(str_read[i], sizeof str_read[i], fp) == NULL) { perror("read failed"); return 1; } printf("%s\n", str_read[i]); } fclose(fp); return 0; }
不过我仍希望了解如何使用fscanf()实现多行(可变行数)读取,以加深对该函数的理解,虽然fgets()似乎更适合此场景。
内容的提问来源于stack exchange,提问作者Eptagon
相关产品推荐
相关产品推荐

