C语言读写INI配置文件:完整指南与代码示例

INI 文件是一种常见的配置文件格式,常用于存储应用程序的配置信息。其结构简单,易于读写,因此在各种应用程序中得到广泛应用。本指南将详细介绍如何使用C语言读写INI文件,并提供完整的代码示例、解析技巧、错误处理和安全建议。

1. INI 文件结构

INI 文件通常由多个节(section)组成,每个节包含多个键值对(key-value pair)。节名用方括号括起来,例如 [section_name]。键值对以等号分隔,例如 key=value。

以下是一个简单的INI文件示例:ini[settings]language=Englishtheme=dark

[database]host=localhostport=3306

2. C语言读取INI文件

以下代码示例演示了如何使用C语言读取INI文件:c#include <stdio.h>#include <stdlib.h>#include <string.h>

#define MAX_BUFFER_SIZE 1024

// 读取INI文件void read_ini(const char* filename) { FILE* file = fopen(filename, 'r'); if (file == NULL) { perror('无法打开文件'); return; }

char buffer[MAX_BUFFER_SIZE];    char current_section[MAX_BUFFER_SIZE] = '';

while (fgets(buffer, sizeof(buffer), file)) {        // 去除行尾空格和换行符        buffer[strcspn(buffer, '

')] = 0;

    // 检查是否是节名        if (buffer[0] == '[' && buffer[strlen(buffer) - 1] == ']') {            strncpy(current_section, buffer + 1, strlen(buffer) - 2);            current_section[strlen(buffer) - 2] = '�';        } else {            // 解析键值对            char* key = strtok(buffer, '=');            char* value = strtok(NULL, '=');

        if (key && value) {                printf('[%s] %s = %s

', current_section, key, value); } } }

fclose(file);}

int main() { const char* filename = 'config.ini'; read_ini(filename); return 0;}

代码解释:

  1. 打开文件: 使用 fopen() 函数以只读模式打开INI文件。2. 逐行读取: 使用 fgets() 函数逐行读取文件内容到缓冲区。3. 解析节名: 判断行首是否为 [ 并且行尾是否为 ],如果是则提取节名。4. 解析键值对: 使用 strtok() 函数根据 = 分割字符串,分别获取键和值。5. 输出结果: 打印读取到的节名、键和值。

3. C语言写入INI文件

以下代码示例演示了如何使用C语言写入INI文件:c#include <stdio.h>

void write_ini(const char* filename) { FILE* file = fopen(filename, 'w'); if (file == NULL) { perror('无法打开文件'); return; }

fprintf(file, '[settings]

'); fprintf(file, 'language=English '); fprintf(file, 'theme=dark ');

fprintf(file, '

[database] '); fprintf(file, 'host=localhost '); fprintf(file, 'port=3306 ');

fclose(file);}

int main() { const char* filename = 'config.ini'; write_ini(filename); printf('已写入INI文件 '); return 0

C语言读写INI配置文件:完整指南与代码示例

原文地址: http://www.cveoy.top/t/topic/oAy 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录