如何在if语句中使用strcmp进行比较

How to use strcmp in if statement to compare

我正在尝试创建一个从 .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

现在我要做的是将 'buffer' 中收到的每个字母与字符 'A' 进行比较,如果是,则打印是,否则打印否。我尝试使用 strcmp 进行比较但是 .exe 文件停止了 运行.

if (strcmp(buffer, "A")==0)
    printf("Hello")

从您的输入格式来看,存在空格,您没有将其视为分隔符的一部分。因此,预计这些空格将出现在指向 bu buffer 的字符串中。你可以做

  • 将分隔符更改为 " ,"
  • if (strcmp(buffer, " A")==0)等等

也就是说,

  1. printf(buffer); 是一种糟糕的风格。要么使用 puts(buffer) 要么更喜欢 printf("%s", buffer).
  2. 在使用 returned 指针之前,检查来自 strtok()NULL return。

以下是我对您的代码所做的一些修复:

  • 我将 strcmp() 检查放在循环内,以便检查从 strtok() 提取的所有字符串片段是否与 "A".[=30= 相等]

    分隔符之前的第一个字符串被提取到buffer,然后它继续从buffer提取直到NULLdo-while循环中。

  • 由于您的 ini 文件的值的格式为 space- 在逗号 (", ") 之后,我将分隔符从 "," 更改为", " (逗号后加space).

    尽管它不会对检查与 "A" 的相等性产生太大影响,因为 A 不会受到影响 (因为它位于值的第一部分 A, H, D, F), 检查逗号和space 之间的字母值(如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