我正在尝试创建一个从 .ini 文件读取数据的 C 程序。数据被读入一个名为 buffer 的变量。 .ini 文件中的数据如下所示:
[key]
title= A, H, D, F
我的程序是这样的:
LPCSTR ini = "C:\\conf.ini";
char var[100];
GetPrivateProfileString("key", "title", 0, var, 100, ini);
char* buffer = strtok(var, ",");
printf("The complete line is %s", var);
buffer=strtok(NULL, ",");
printf(buffer);
while((buffer= strtok(NULL, ","))!=NULL)
printf(buffer);
输出看起来像这样:
The complete line is A, H, D, F
A
H
D
F
现在我要做的是将“缓冲区”中收到的每个字母与字符“A”进行比较,如果是,则打印是,否则打印否。我尝试使用 strcmp 进行比较,但 .exe 文件已停止运行。
if (strcmp(buffer, "A")==0)
printf("Hello")
以下是我对您的代码所做的一些修复:
我将 strcmp()
检查放在循环内,以便检查从 strtok()
提取的所有字符串片段是否与 相等” A”
.
分隔符前的第一个字符串被提取到buffer
,然后继续从buffer
中提取,直到do-中的NULL
while
循环。
由于您的 ini
文件的值具有逗号后空格的这种格式 (", "
),我将分隔符从 ","更改为
到 ", "
(在逗号后添加空格)。
尽管它不会对检查与 "A"
的相等性产生太大影响,因为 A
不会受到影响 (因为它在第一个part of the value A, H, D, F
), 检查逗号和空格之间的字母值(例如H
, D
, F
) 如果我们使用 ","
将受到影响 (仅逗号)作为分隔符。
修改代码
#include <stdio.h>
#include <windows.h>
int main() {
LPCSTR ini = "C:\\conf.ini";
char var[100];
GetPrivateProfileString("key", "title", NULL, var, sizeof var, ini);
printf("The complete line is %s\n", var);
// first piece of string (letter) before delimiter
// changed delimiter from "," to ", "
char* buffer = strtok(var, ", ");
// exits if buffer is NULL
if ( !buffer )
return;
do {
// prints the letter
printf("%s", buffer);
// checking if the extracted piece of code from var is equal with "A",
// prints either " Yes" or " No"
( !strcmp(buffer, "A") ) ? puts(" Yes") : puts(" No");
// continues checking until NULL
} while( buffer = strtok(NULL, ", ") );
}
输出
The complete line is A, H, D, F
A Yes
H No
D No
F No
我是一名优秀的程序员,十分优秀!