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

在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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.28 09:06:04