我正在尝试创建一个从.ini文件中读取数据的C程序。数据被读入一个名为缓冲区的变量中。.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‘,如果这是真的打印是,否则打印No。我尝试使用strcmp进行比较,但是.exe文件停止运行。
if (strcmp(buffer, "A")==0)
    printf("Hello")发布于 2015-07-15 07:39:06
下面是我对您的代码所做的一些修正:
strcmp()检查放在循环中,以便检查从strtok()提取的所有字符串是否与"A"相等。
分隔符提取到buffer之前的第一个字符串,然后继续从buffer提取,直到do-while循环中的NULL。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发布于 2015-07-15 07:21:00
就您的输入格式而言,存在空格,而您并不认为这是分隔符的prt。因此,预期的是,这些空格将出现在字符串指定的bu buffer中。你要么可以
" ,"if (strcmp(buffer, " A")==0)等等。尽管如此,
printf(buffer);是一种糟糕的风格。要么使用puts(buffer) t偏好printf("%s", buffer)。NULL从strtok()返回的值。https://stackoverflow.com/questions/31423838
复制相似问题