3
#include <iostream>

int main() {
    if ("zabc" < "def") {
        std::cout << "Less.\n";
    }
}

上面的代码打印Less.. 我知道这不是char*在 C++ 中比较 s 的正确方法,但是上面的代码如何打印Less.

4

4 回答 4

9

该代码比较两个字符串的地址。形式上,这是未指定的行为,因为它们不是同一数组的元素,但在这种情况下,它可能说的是实话:第一个字符串的地址低于第二个字符串。但是你不能指望那个...

于 2012-10-01T17:12:46.680 回答
7

您只是在比较地址。您需要使用strcmp

于 2012-10-01T17:13:29.100 回答
2

它正在比较地址。对于某些特定编译器编译的此代码的某些特定调用,“zabc”恰好位于比“def”低的地址。(它也可能位于更高的地址,具体取决于编译器,甚至可能针对同一可执行文件的不同调用。)

于 2012-10-01T17:11:45.337 回答
2

当你这样做时,编译器会分配两个 char 数组,一个用于“def”,一个用于“zabc”。这是在编译时完成的。

由于“zabc”是在“def”之前定义的,你的编译器可能会给第一个更小的地址,尽管这是一个未定义的行为。稍后比较地址时,“zabc”“更小”。您应该看到,如果您执行下一个操作,您仍然会打印“Less”。

 if ("def" < "zabc") {
    std::cout << "Less.\n";
}
于 2012-10-01T17:15:30.080 回答