读取ini文件的c++代码
时间: 2023-09-09 21:08:24 浏览: 88
以下是一个简单的读取 ini 文件的 C 代码示例:
```c
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define MAX_LINE_LEN 1024
int read_ini_file(const char *filename, const char *section, const char *key, char *value) {
FILE *fp;
char line[MAX_LINE_LEN];
char *ptr, *eptr;
char cur_section[MAX_LINE_LEN] = "";
int in_section = 0;
if ((fp = fopen(filename, "r")) == NULL) {
fprintf(stderr, "Error: Failed to open file %s\n", filename);
return -1;
}
while (fgets(line, MAX_LINE_LEN, fp) != NULL) {
// 去掉行末的空格和换行符
if ((ptr = strrchr(line, '\n')) != NULL) {
*ptr = '\0';
}
if ((ptr = strrchr(line, '\r')) != NULL) {
*ptr = '\0';
}
if ((ptr = strrchr(line, ' ')) != NULL) {
*ptr = '\0';
}
if ((ptr = strrchr(line, '\t')) != NULL) {
*ptr = '\0';
}
// 判断是否为段落头
if (line[0] == '[' && (eptr = strrchr(line, ']')) != NULL) {
*eptr = '\0';
strncpy(cur_section, line+1, MAX_LINE_LEN-2);
in_section = (strcmp(cur_section, section) == 0);
}
// 判断是否为当前段落下的键值对
if (in_section && (ptr = strchr(line, '=')) != NULL) {
*ptr = '\0';
if (strcmp(line, key) == 0) {
strncpy(value, ptr+1, MAX_LINE_LEN-1);
fclose(fp);
return 0;
}
}
}
fclose(fp);
return -1;
}
int main(int argc, char **argv) {
char value[MAX_LINE_LEN] = "";
if (read_ini_file("config.ini", "proxy", "sip_proxy", value) == 0) {
printf("sip_proxy = %s\n", value);
} else {
printf("Failed to read sip_proxy from config.ini\n");
}
return 0;
}
```
在上述代码中,`read_ini_file` 函数用于读取指定 ini 文件中的指定段落和键的值,将读取结果保存在 `value` 缓冲区中,并返回读取状态。在 `main` 函数中,我们使用 `read_ini_file` 函数读取了 `config.ini` 文件中 `proxy` 段落下的 `sip_proxy` 键的值,并输出到终端上。
需要注意的是,该代码示例中仅实现了一个简单的 ini 文件读取函数,并未对 ini 文件格式进行严格的校验和处理。在实际使用中,建议使用成熟的 ini 文件解析库,例如 `inih` 和 `libconfig` 等。
阅读全文