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

如何用C语言提取ini配置文件指定section及下属对应配置内容

问题解答

1. strcmp匹配section的思路可行性

这个思路本身是可行的,但存在两个容易触发匹配失败的边界问题:

  • 不同系统的文件换行符不一致,Windows下换行是\r\n、Linux下是\n,如果行尾是\r\n,直接用strcmp(x, "[students]\n")会匹配失败
  • 如果section标题行前后存在空格(比如行首多了空格的[students]),也会导致匹配失效

2. 空白行的处理方案

你可以新增两个逻辑规避空白行和匹配异常:

  • 新增一个状态标记变量,用来标记当前是否处于目标section的范围内
  • 每次读取一行后先做trim处理,去掉行首尾的空格、换行、回车等空白字符:
    • 处理后为空的行就是空白行,直接按当前状态决定是否打印即可,不会触发section匹配逻辑
    • 仅处理后以[开头、]结尾的行,才判断是不是目标section

3. 可运行的修改后代码

#include <stdio.h>
#include <string.h>
#include <ctype.h>

// 去掉字符串首尾空白字符的辅助函数
char* trim(char* str) {
    // 过滤开头空白
    while(isspace((unsigned char)*str)) str++;
    if(*str == 0) return str;
    // 过滤结尾空白
    char* end = str + strlen(str) - 1;
    while(end > str && isspace((unsigned char)*end)) end--;
    end[1] = '\0';
    return str;
}

int main() {
    char x[255];
    char trimmed_line[255];
    int in_target_section = 0; // 状态标记:是否在目标section范围内
    const char* target_section = "students";

    FILE* file = fopen("try.ini", "r");
    if(!file) {
        perror("fopen failed");
        return 1;
    }
    
    while (fgets(x, sizeof(x), file) != NULL) {
        strcpy(trimmed_line, x);
        char* t = trim(trimmed_line);
        
        // 判断是否为section行
        if(t[0] == '[' && t[strlen(t)-1] == ']') {
            // 提取section名称,去掉首尾的[]
            char section_name[255];
            strncpy(section_name, t+1, strlen(t)-2);
            section_name[strlen(t)-2] = '\0';
            
            if(strcmp(section_name, target_section) == 0) {
                in_target_section = 1;
                printf("%s", x); // 打印原行保留格式
            } else {
                // 遇到其他section,若之前在目标区间则直接终止遍历
                if(in_target_section) break;
                in_target_section = 0;
            }
            continue;
        }
        
        // 非section行,在目标区间内就打印,空白行也会正常输出
        if(in_target_section) {
            printf("%s", x);
        }
    }

    fclose(file);
    return 0;
}

内容的提问来源于stack exchange,提问作者nalyr

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.26 02:36:04