提前为我的无知表示歉意。我不完全理解如何比较 C 中的 char 数组。我最初是用简单的方法比较 c 中的两个 char 数组==
操作员。
所以在 C 函数中,我会做这样的事情。
char *a = "test";
char *b = "test";
if (a == b) ..do something
但我读到我应该使用strcmp
代替==
像这样。
char *a = "test";
char *b = "test";
if (0 == strcmp(a, b)) ..do something
哪一个是正确的,为什么?另一个在做什么?
if (a == b)
这里您正在比较指针而不是字符串
strcmp(a, b)
这里你正在比较字符串
Which one is correct and why? What is the other one doing?
由于有 2 个字符串存储在不同的内存位置,或者如果存储相同的字符串,则有可能a==b
比较指针没有意义。您想要的是比较指针指向的位置的内容。这是由strcmp()
这是比较字符串的正确方法。
例如 :
#include <stdio.h>
int main(void) {
char *a = "test";
char *b = "test";
printf("%p\n %p",(void *)a,(void *)b);
return 0;
}
输出是
0x8048540
0x8048540
所以指针a和b都指向同一个内存位置a==b
请注意,这里我们比较的不是字符串中的实际字符,而是指针。
我在另一台机器上运行相同的代码,并且存储该字符串的位置不同。
0x4005f8
0x4005fd
所以现在即使字符串可能相同,你也会看到a != b
。
因此使用strcmp()
比较字符串。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)