在C语言中如何解析字典文件并拆分单词与其对应释义
C语言字典文件解析优化实现
原有代码问题
- 缺少文件打开失败的校验逻辑,文件不存在时会触发空指针访问异常
- 格式匹配规则未适配示例条目带序号前缀的结构,会把序号和单词合并存入单词变量
- 未限制字符串读取长度,单词或释义超过缓冲区大小时会出现内存越界
- 默认匹配制表符结尾,若条目以换行结尾会匹配失败
修正后代码
#include <stdio.h> void ReadFromFile() { FILE *dictionary = fopen("dictionary.txt", "r"); // 校验文件是否正常打开 if (dictionary == NULL) { printf("字典文件打开失败,请检查路径是否正确\n"); return; } char word[20]; char meaning[50]; // 调整fscanf格式串适配条目结构,增加长度限制防止溢出 while (fscanf(dictionary, "%*d. %19[^:]: %49[^\n]", word, meaning) == 2) { printf("单词:%s | 释义:%s\n", word, meaning); } fclose(dictionary); }
格式串说明
%*d.:匹配条目前缀的数字序号、点和空格,*标识该部分内容读取后不存入变量%19[^:]:最多读取19个非冒号的字符存入单词缓冲区,预留1位存储字符串结束符::匹配单词和释义之间的冒号和空格%49[^\n]:最多读取49个非换行的字符存入释义缓冲区,适配以换行结尾的条目
如果你的字典条目实际是用制表符分隔结尾,可将格式串末尾的%49[^\n]替换为%49[^\t]\t即可正常匹配。
内容的提问来源于stack exchange,提问作者HashTable
相关产品推荐
相关产品推荐

