如何比较C中的字符串条件

我在比较C中的两个字符串时遇到问题,看它们是否相等。

switch(i) { case 1: printf("Got in case 1. TextA=%s word=%s \n",TextA,word); if(TextA == word) { SubTypeOption = 1; printf("SubTypeOptioon = %d",SubTypeOption); } 

在我的输出中,我得到“得到的情况1. TextA = SupTypeA字= SupTypeA SubTypeOption = 0”//所以它没有被改变

==运算符比较指针 。 只有当两个char*指向内存中的相同地址时,它才会成功。 比较C中字符串的内容需要调用strcmpstrncmp

 if (strcmp(TextA, word) == 0) { // Strings are identical } 

注意比较为零:它是必需的,因为strcmp函数按字典顺序比较字符串,当字符串相等时返回零。 您需要包含才能使用strcmp

使用strcmp

不是’==’运算符

http://www.cplusplus.com/reference/cstring/strcmp/

您无法使用==符号比较字符串,因为您正在比较它们是否放在同一个内存位置。 TextAword是指向每个c字符串的第一个字符的指针。

使用strcmp()strlcmp()函数来比较字符串。 如果两个字符串相等,它们将返回0

 #define STREQ(a,b) (strcmp((a),(b))==0) if (STREQ(TextA, word)){ } 

简单 – 使用strcmp – 这是您需要的function。

您无法将字符串(或任何其他数组类型)的内容与标准关系运算符(如==<>等)进行比较。您需要使用strcmp库函数:

 #include  ... if (strcmp(TextA, word) == 0) { // strings are equal } 

如果TextA在字典上小于word ,则strcmp将返回一个整数值,如果它们在词典上相等,则返回0;如果TextA在词典上大于word ,则TextA > 0。

请注意,在C语言环境中,这意味着字符串将按“ASCIIbetically”排序; 也就是说,任何以'a'开头的字符串都将出现在以'Z'开头的字符串之后,因为'a'的ASCII代码大于'Z'

那你为什么不能用==来比较字符串呢?

除非它是sizeof_Alignof或一元&运算符的操作数,或者是用于在声明中初始化数组的字符串文字,否则“N元素数组T ”的表达式将转换为表达式类型为“指向T指针”,其值将是数组的第一个元素的地址。

这意味着,在条件TextA == wordTextAword这两个表达式都被转换为指针值; 我们不是比较两个数组的内容,而是比较它们的地址。

 switch(i) { case 1: printf("Got in case 1. TextA=%s word=%s \n",TextA,word); if(strcmp(TextA,word)==0) { //something like that SubTypeOption = 1; printf("SubTypeOptioon = %d",SubTypeOption); } 

http://www.cplusplus.com/reference/cstring/strcmp/