C 编程语言:if 语句不能正确处理字符

C programming language :if statements are not working correctly with characters

我试图让这个程序说好,但它说还好 尽管我使变量值与 if 测试值相同

#include <stdio.h>
#include <stdlib.h>

int main()
{
    char history[200];
    history == "NY school";

    if(history == "NY school")
    {
        printf("good");
    }
    else{printf("okay");}
    return 0;
}

您需要使用函数strcmp

  if (strcmp(history ,"NY school") == 0) ....

否则你就是在比较指针

加改

  history == "NY school";

使用strcpy

这应该适合你:

#include <stdio.h>
#include <string.h>
        //^^^^^^^^ Don't forget to include this library for the 2 functions

int main() {  

    char history[200];
    strcpy(history, "NY school");
  //^^^^^^^Copies the string into the variable
    if(strcmp(history, "NY school") == 0) {
     //^^^^^^ Checks that they aren't different
        printf("good");
    } else {
        printf("okay");
    }

    return 0;

}

有关 strcpy() 的更多信息,请参阅:http://www.cplusplus.com/reference/cstring/strcpy/

有关 strcmp() 的更多信息,请参阅:http://www.cplusplus.com/reference/cstring/strcmp/

无法分配字符串(这将使用单个 =,而不是您的代码中的 ==)。在标准 header <string.h>.

中查找 strcpy() 函数

此外,字符串(或任何数组,就此而言)不能使用关系运算符(==!= 等)进行比较 - 这种比较比较指针(第一个地址数组的元素)而不是字符串的内容。要比较字符串,请再次使用 strcmp() 函数 <string.h>.

通过一些实现定义的优化器运气,这也可能有效:

#include <stdio.h>

int main(void)
{
  char * history = "NY school";

  if (history == "NY school") /* line 7 */
  {
    printf("good");
  }
  else
  {
    printf("okay");
  }

  return 0;
}

至少它在被 gcc (Debian 4.7.2-5) 4.7.2 编译时有效,顺便说一句,没有优化。

上面显示的代码打印:

good

但是在编译期间它会触发警告(针对第 7 行):

 warning: comparison with string literal results in unspecified behavior [-Waddress]