我在这里有一个结构,例如:
char *sname;
........
players[i].sname
Run Code Online (Sandbox Code Playgroud)
等于"詹姆斯".
我需要检查值之间的相等性,如下所示:
if (players[i].sname == 'Lee')
Run Code Online (Sandbox Code Playgroud)
但我没有太多运气.是否有一个str*我应该使用的功能,或者无论如何都要修复我的if陈述?
Chr*_*utz 10
简短的回答:strcmp().
答案很长:所以你有这个:
if(players[i].sname == 'Lee')
Run Code Online (Sandbox Code Playgroud)
这在几个方面都是错误的.首先,单引号在C中表示"字符文字"而不是"字符串文字".
其次,更重要的是,"string1" == "string2"不比较字符串,它比较char *s或指向字符的指针.它会告诉您两个字符串是否存储在同一个内存位置.这意味着他们是平等的,但错误的结果并不意味着他们是不平等的.
strcmp()将基本上通过并比较字符串中的每个字符,停止在不相等的第一个字符,并返回两个字符之间的差异(这就是为什么你必须说strcmp() == 0或!strcmp()为了相等).
还要注意功能strncmp()和memcmp()类似strcmp()但更安全的功能.
你应该使用strcmp():
if (strcmp(players[i].sname, "Lee") == 0) { ...
Run Code Online (Sandbox Code Playgroud)
另请注意,C中的字符串用双引号括起来:"".单个字符用单引号括起来:''.我不确定你的编译器究竟在做什么'Lee',但几乎肯定不是你想要的.