You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.06 19:20:12