C ++ char *比较如何工作?

时间:2012-10-01 17:09:47

标签: c++

#include <iostream>

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

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

4 个答案:

答案 0 :(得分:9)

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

答案 1 :(得分:7)

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

答案 2 :(得分:2)

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

答案 3 :(得分:2)

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

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

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