是否有将const char *赋给字符串的危险?

时间:2016-11-17 16:53:46

标签: c++ string initialization

我基本上是将一个const char *值赋给一个字符串。 我正在检查条件并将字符串设置为空为默认值。

在参数化构造函数中,我将字符串设置为空,如下所示

ClassName:: ClassName(X x, string name):X(x), name(){}

一旦我将其用作

,我就将字符串设置为空
name="";

上述初始化方法是否正确?

还有将const char *分配给字符串的风险吗?

const char* diag;
string name;

name= diag;

2 个答案:

答案 0 :(得分:3)

std::string具有类型为char *的对象的相应构造函数和赋值运算符。相对于此类对象可能出现的唯一问题是初始化程序是空指针时。

考虑到如果声明了这样的变量

const char *name = "";

然后name不是空指针。它是指向类型为'\0'的数组的第一个字符(字符const char[1])的指针,该数组对应于“空”字符串文字并且具有静态存储持续时间。

如果你写的是

std::strig s( name );

std::string s = name;

然后你会得到一个类型为s的空对象std::string,因为没有什么可以从“空”字符串文字中复制。

因此,以这种方式声明std::string类型的对象是没有意义的。写

就足够了
std::string s;

答案 1 :(得分:0)

在您的示例中没有问题,但通常您需要知道const char *指向的字符数组是以null结尾的,否则std :: string构造函数将继续读取内存超过阵列结束。