C++ C+;中的char*和string有何不同+?(请在说明中填写代码)
来自C语言,我一直被教导char*和string彼此非常相似。 下面是我使用string和char*实现的一段代码 后者给出了一个错误。 prog.cpp:在函数“char*foo()”中: Pc.CPP:8:15:警告:ISO C++禁止转换字符串常量 到“char*”[-Wwrite strings] char*bro=“karan” 为什么后者不能按预期工作 字符串一:C++ C+;中的char*和string有何不同+?(请在说明中填写代码),c++,string,C++,String,来自C语言,我一直被教导char*和string彼此非常相似。 下面是我使用string和char*实现的一段代码 后者给出了一个错误。 prog.cpp:在函数“char*foo()”中: Pc.CPP:8:15:警告:ISO C++禁止转换字符串常量 到“char*”[-Wwrite strings] char*bro=“karan” 为什么后者不能按预期工作 字符串一: #包括 #包括 使用名称空间std; 字符串foo() { 字符串bro=“karan”; 返回兄弟; } int m
#包括
#包括
使用名称空间std;
字符串foo()
{
字符串bro=“karan”;
返回兄弟;
}
int main()
{
coutchar*bro=“karan”;
bro
变量是一个char*
。字符串“karan”
是一个const char[6]
数据类型,将隐式转换为const char*
,这意味着“指向常量值的指针”
您的警告来自这样一个事实,即在该行中,您试图将指向const
数据的内容分配给指向非const
数据的内容
这里,std::string
和char*
不同于std::string
有一个构造函数,它接受一个const char*
,在内部分配一个char数组,并复制字符串,而带有char*
的代码不会复制任何内容。“后者给出了一个错误。”我们应该猜测这个错误?s/string*foo()
/string foo()) >我想你是说第一个代码片段会出错。这些错误与<代码> char */COD>和<代码> STD::String 之间没有任何关系。抱歉。我将尽快编辑它。@ AururaGaOrgaAJAO。以上仅是出于遗留原因的警告。严格遵守应该遵守。这不是有效的C++代码。
#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;
}