
인터넷에서 제공하는 ini_parse_quantity 함수를 사용하여 ini 파일의 설정 값을 읽어오려고 합니다. 그러나 값을 읽어오지 못하는 문제가 있습니다.
해당 구조의 ini 파일에서 key1의 값을 읽어오기 위해 다음 코드를 작성했습니다.
#hostingforum.kr
c
#include
#include
#include
#define MAX_SECTION 10
#define MAX_KEY 10
#define MAX_VALUE 100
typedef struct {
char section[MAX_SECTION][50];
char key[MAX_KEY][50];
char value[MAX_KEY][MAX_VALUE];
} INI;
void ini_parse_quantity(INI *ini, const char *filename) {
FILE *fp;
char line[256];
int i, j;
fp = fopen(filename, "r");
if (fp == NULL) {
printf("Error opening filen");
return;
}
while (fgets(line, 256, fp)) {
line[strcspn(line, "n")] = 0; // 개행문자 제거
if (line[0] == '[' && line[strlen(line) - 1] == ']') {
strcpy(ini->section[ini->count_section], line + 1);
ini->count_section++;
} else {
i = 0;
while (line[i] != '=' && line[i] != ' ') {
i++;
}
if (line[i] == '=') {
strcpy(ini->key[ini->count_key], line);
ini->count_key++;
}
}
}
fclose(fp);
}
int main() {
INI ini;
ini.count_section = 0;
ini.count_key = 0;
ini_parse_quantity(&ini, "example.ini");
printf("%sn", ini.key[0]);
return 0;
}
해당 코드에서 key1의 값을 읽어오지 못하는 이유는, `ini_parse_quantity` 함수에서 `key` 값을 읽어오기 위해 `strcpy` 함수를 사용하여 `line` 문자열의 내용을 `ini->key[ini->count_key]` 문자열에 복사하고 있습니다.
그러나, `line` 문자열의 내용은 `[Section1]` 또는 `key1 = value1` 형식의 문자열이기 때문에, `key` 값을 읽어오지 못하는 문제가 발생합니다.
해당 문제를 해결하기 위해, `line` 문자열에서 `=` 문자를 기준으로 `key` 값과 `value` 값을 분리하여 읽어오도록 수정해야 합니다.
#hostingforum.kr
c
#include
#include
#include
#define MAX_SECTION 10
#define MAX_KEY 10
#define MAX_VALUE 100
typedef struct {
char section[MAX_SECTION][50];
char key[MAX_KEY][50];
char value[MAX_KEY][MAX_VALUE];
} INI;
void ini_parse_quantity(INI *ini, const char *filename) {
FILE *fp;
char line[256];
int i, j;
fp = fopen(filename, "r");
if (fp == NULL) {
printf("Error opening filen");
return;
}
while (fgets(line, 256, fp)) {
line[strcspn(line, "n")] = 0; // 개행문자 제거
if (line[0] == '[' && line[strlen(line) - 1] == ']') {
strcpy(ini->section[ini->count_section], line + 1);
ini->count_section++;
} else {
i = 0;
while (line[i] != '=' && line[i] != ' ') {
i++;
}
if (line[i] == '=') {
// key와 value를 분리하여 읽어오기
char *key = line;
char *value = line + i + 1;
// key와 value를 제거하여 공백문자로 초기화
while (*key != ' ') {
if (*key == ' ') {
*key = ' ';
break;
}
key++;
}
while (*value != ' ') {
if (*value == ' ') {
*value = ' ';
break;
}
value++;
}
strcpy(ini->key[ini->count_key], key);
ini->count_key++;
strcpy(ini->value[ini->count_key - 1], value);
}
}
}
fclose(fp);
}
int main() {
INI ini;
ini.count_section = 0;
ini.count_key = 0;
ini_parse_quantity(&ini, "example.ini");
printf("%sn", ini.key[0]);
return 0;
}
해당 코드에서 `key`와 `value`를 분리하여 읽어오기 위해, `line` 문자열에서 `=` 문자를 기준으로 `key`와 `value`를 분리하여 읽어오도록 수정했습니다.
또한, `key`와 `value`를 제거하여 공백문자로 초기화하여, `key`와 `value`가 중복되는 문제를 해결했습니다.
해당 코드를 실행하면, `key1`의 값을 읽어오고, `value1`의 값을 읽어오게 됩니다.
2025-04-26 02:19