为什么在C++中要使用strcmp而不是==?

12

我想知道在C++中,使用strcmp或简单地使用==比较两个字符数组时,我的代码都能完美运行。有人可以为什么要使用strcmp而不是==来进行解释吗?


7
你有一个代码示例,可以同时使用==strcmp工作良好吗? - user289086
char abc1[10] = "Apple"; char abc2[10] = "Mango"; if (abc1 == abc2) cout << "相等 "; else cout << "不相等"; - Fawad Nasim
然而现在我明确了==指向同一位置,我之前被不等于的结果所困惑。 - Fawad Nasim
2个回答

21

strcmp 比较两个实际的 C 字符串 的内容,而在两个 C 字符串 之间使用 == 是在询问这两个 char 指针是否指向相同的位置。

如果我们有以下定义的一些 C 字符串

char string_a[] = "foo";
char string_b[] = "foo";
char * string_c = string_a;

strcmp(string_a, string_b) == 0 返回 true,而 string_a == string_b 返回 false。只有使用==比较string_astring_c时才会返回true

如果你想比较两个 C-string 的实际内容而不是它们是否只是彼此的别名,请使用 strcmp

顺便提一下:如果您使用的是标记为标签的 C++ 而不是 C,那么应该使用 std::string。例如:

std::string string_d = "bar";
std::string string_e = "bar";

那么 string_d == string_e 将返回 true。而 string_d.compare(string_e) 则会返回 0,这是 C++ 版本的 strcmp


注意:这不适用于std::string(以防万一有人怀疑)。 - user1241335
3
由于我写了一个示例来展示给提问者,所以你比我更快地回答了问题。不需要再写另一个答案,因为你已经把所有东西都搞定了,我只是会把示例留在这里(将变量重命名为您的版本)。 - AliciaBytes

2
使用strcmp的一个优点是,如果str1小于str2,它将返回< 0;如果str1大于str2,则返回0;如果它们相等,则返回0。但是,如果只使用==,它只会返回true或false。

它将返回不同比较的布尔值。 - Abhinav Gauniyal

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接