来自C,我总是被告知char *和字符串彼此非常相似。这是我使用字符串和字符 * 实现的一段代码。
后者给出一个错误。
prog.cpp: 在函数 'char* foo()' 中:
prog.cpp:8:15: 警告:ISO C++禁止转换字符串常量 到 'char*' [-wwrite-strings] 字符 *兄弟="卡兰";
为什么后者没有按预期工作?
字符串一:
#include<iostream>
#include<string>
using namespace std;
string foo()
{
string bro="karan";
return bro;
}
int main()
{
cout << foo() << endl;
return 0;
}
字符 * 一:
#include<iostream>
#include<string>
using namespace std;
char *foo()
{
char *bro="karan";
return bro;
}
int main()
{
cout << foo() << endl;
return 0;
}
char *bro="karan";
bro
变量是一个char*
。字符串"karan"
是一种const char[6]
数据类型,将隐式转换为 const char*
,这意味着"指向常量值的指针"
您的警告来自这样一个事实,即在该行上,您尝试将指向const
数据的内容分配给指向非const
数据的内容。
在这里,std::string
和 char*
与以下事实不同:std::string
有一个接受const char*
的构造函数,请参阅此处的参考,在内部分配一个 char 数组,并复制字符串,而带有 char*
的代码不会复制任何内容。