INI文件读取本质是键值对解析,c++无标准库支持,常用inih库(单头文件、回调式解析)或手写解析器,windows下可用GetPrivateProfileString但需注意编码、路径和缓冲区问题。

INI 文件读取本质是键值对解析,C++ 没有标准库支持,必须借助第三方或手写解析器
标准 C++ 不提供 GetPrivateProfileString 或类似 INI 解析接口,Windows API 的 GetPrivateProfileString 仅限 Windows 平台且依赖 kernel32.lib,跨平台项目中基本不可用。多数实际项目选择轻量级第三方库(如 inih)或封装简单的行扫描逻辑——关键不是“能不能读”,而是“要不要支持节嵌套、注释、转义、空格容忍”等细节。
用 inih 库读取 INI 最省心,头文件即用,无需编译
inih 是纯 C 实现的单头文件库(ini.h + ini.c),C++ 项目可直接 #include 使用。它不构建内存结构,而是通过回调函数逐行通知解析结果,内存占用极低,适合嵌入式或配置项较少的场景。
典型用法:
// callback 函数 int handler(void* user, const char* section, const char* name, const char* value) { if (strcmp(section, "database") == 0 && strcmp(name, "port") == 0) { *(int*)user = atoi(value); // 假设 user 指向 int port; } return 1; // 继续解析 } // 调用 int port = 0; ini_parse("config.ini", handler, &port);
-
ini_parse第二个参数是回调函数,第三个是传给它的上下文指针,适合传递多个变量地址(例如用 Struct 封装) - 不支持
[section:sub]这类嵌套节名,遇到未知格式会跳过整行 - 注释以
;或#开头,会被自动忽略;键名前后空格被保留,值前后空格默认不 trim(需手动strtrim)
Windows 下用 GetPrivateProfileString 需注意路径和 Unicode 问题
若只面向 Windows 桌面程序,且配置文件路径固定,可用系统 API 快速读取,但容易踩坑:
立即学习“C++免费学习笔记(深入)”;