如何检查值是否与字符串匹配

Dom*_*mra 5 c

我在这里有一个结构,例如:

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()但更安全的功能.


Gre*_*ill 9

你应该使用strcmp():

if (strcmp(players[i].sname, "Lee") == 0) { ...
Run Code Online (Sandbox Code Playgroud)

另请注意,C中的字符串用双引号括起来:"".单个字符用单引号括起来:''.我不确定你的编译器究竟在做什么'Lee',但几乎肯定不是你想要的.