字符 * 和字符串在C++中有何不同?(在描述中编写代码)

How are char * and string different in C++ ? (wrt the code in the description)

本文关键字:描述 代码 字符串 C++ 字符 何不同      更新时间:2023-10-16

来自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::stringchar* 与以下事实不同:std::string有一个接受const char*的构造函数,请参阅此处的参考,在内部分配一个 char 数组,并复制字符串,而带有 char* 的代码不会复制任何内容。