#include <iostream>
int main() {
if ("zabc" < "def") {
std::cout << "Less.\n";
}
}
上面的代码打印Less.
. 我知道这不是char*
在 C++ 中比较 s 的正确方法,但是上面的代码如何打印Less.
?
#include <iostream>
int main() {
if ("zabc" < "def") {
std::cout << "Less.\n";
}
}
上面的代码打印Less.
. 我知道这不是char*
在 C++ 中比较 s 的正确方法,但是上面的代码如何打印Less.
?
该代码比较两个字符串的地址。形式上,这是未指定的行为,因为它们不是同一数组的元素,但在这种情况下,它可能说的是实话:第一个字符串的地址低于第二个字符串。但是你不能指望那个...
您只是在比较地址。您需要使用strcmp
它正在比较地址。对于某些特定编译器编译的此代码的某些特定调用,“zabc”恰好位于比“def”低的地址。(它也可能位于更高的地址,具体取决于编译器,甚至可能针对同一可执行文件的不同调用。)
当你这样做时,编译器会分配两个 char 数组,一个用于“def”,一个用于“zabc”。这是在编译时完成的。
由于“zabc”是在“def”之前定义的,你的编译器可能会给第一个更小的地址,尽管这是一个未定义的行为。稍后比较地址时,“zabc”“更小”。您应该看到,如果您执行下一个操作,您仍然会打印“Less”。
if ("def" < "zabc") {
std::cout << "Less.\n";
}