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

如何使用fscanf读取单词文本文件并存入带索引的字符串数组

问题排查与修正方案

原代码核心问题

  • 数组类型错误:你需要存储多个字符串,必须使用二维字符数组,原代码的char src[1000]是一维字符数组,仅能存储单个字符串,每个元素对应单个字符,所以输出src[0]只能拿到单个字符。
  • 格式符使用错误:%[^EOF]是非法写法,[^]语法用于匹配不在指定字符集合内的字符,EOF是文件结束标记不是普通字符,无法这么使用。你的需求是逐行读无空格的单词,直接用%s格式符即可,它会自动跳过换行、空格等空白符读取连续字符串。
  • 循环逻辑错误:原循环每次将读取内容写入&src[i](即从src数组的第i位开始写入),会导致内容覆盖、逻辑完全混乱,且循环次数和读取逻辑不匹配。

修正后可运行代码

#include <stdio.h>

int main(int argc, char *argv[])
{
    FILE *fp = fopen("wordlist.txt", "r");
    if (fp == NULL)
    {
        printf("File open error");
        return 0;
    }
    // 定义二维数组:最多存100个单词,每个单词最长19个字符(加1位字符串结束符)
    char src[100][20];
    int i = 0;
    // fscanf读取成功返回读取的项数,到文件尾返回EOF就停止循环,同时避免数组越界
    while (fscanf(fp, "%s", src[i]) != EOF && i < 100)
    {
        i++;
    }
    fclose(fp);

    // 测试输出
    for (int j = 0; j < i; j++)
    {
        printf("src[%d] = %s\n", j, src[j]);
    }

    getchar();
    return 0;
}

补充说明

如果你的单词可能包含空格,需要严格按行读取,把格式符%s换成%19[^\n]即可,同时每次读取后加一句getc(fp)吃掉行尾的换行符,避免下次读取到空内容。

内容的提问来源于stack exchange,提问作者levi.weiwei

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.29 21:36:08