我正在尝试创建一个从.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
直到NULL
内部do-while
循环。
由于您ini
文件的值具有以下格式,即逗号后的空格(", "
),因此我将定界符从更改","
为", "
(在逗号后添加空格)。
虽然这不会使检查平等太大的影响"A"
,因为A
不会受到影响(因为它是价值的第一部分 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
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句