这是非常简单的代码:
产生两个警告:与字符串字面值比较的结果未指定行为。
你可以解释一下为什么这段代码不起作用,但如果我更改
#include <iostream>
using namespace std;
void exec(char* option)
{
cout << "option is " << option << endl;
if (option == "foo")
cout << "option foo";
else if (option == "bar")
cout << "opzion bar";
else
cout << "???";
cout << endl;
}
int main()
{
char opt[] = "foo";
exec(opt);
return 0;
}
产生两个警告:与字符串字面值比较的结果未指定行为。
你可以解释一下为什么这段代码不起作用,但如果我更改
char opt[]
to
char *opt
程序可以正常运行,但为什么会生成警告?这与\0终止有关吗?opt的两个声明之间有什么区别?如果我使用const限定符会怎样?解决方案是使用std::string。
if (option == "foo")
时,你并不是在比较两个字符串 -- 你正在比较两个 指针。 - John Dibling