如何使用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
相关产品推荐
相关产品推荐

