Rug*_*rra 4 c++ string comparison warnings literals
这个非常简单的代码:
#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;
}
Run Code Online (Sandbox Code Playgroud)
生成两个警告:与字符串文字比较导致未指定的行为.
你能解释为什么这段代码不起作用,但如果我改变了
char opt[]
Run Code Online (Sandbox Code Playgroud)
至
char *opt
Run Code Online (Sandbox Code Playgroud)
它有效,但产生警告?它与\ 0终止有关吗?opt的两个声明有什么区别?如果我使用const限定符怎么办?解决方案是使用std :: string?
Joh*_*ler 12
char数组或char指针与C++中的字符串类对象并不是真的相同,所以这个
if (option == "foo")
Run Code Online (Sandbox Code Playgroud)
不比较字符串option到字符串"富"它比较地址的option使用字符串"富"的地址.如果您想知道该选项是否与"foo"相同,则需要使用众多字符串比较函数之一. strcmp是显而易见的方法,或者你可以使用std::string而不是char*
==仅当您使用时才可以使用运算符来比较字符串std::string(这是一个很好的做法)。如果使用 C 风格的 char*/char[] 字符串,则需要使用 C 函数strcmp或strncmp.
您还可以使用与 C 字符串std::string::operator ==进行比较:std::string
std string foo = "foo";
const char *bar = "bar";
if (foo == bar)
...
Run Code Online (Sandbox Code Playgroud)