首页 > 解决方案 > 此代码中是否存在悬空指针问题?

问题描述

string str;    
char *a=str.c_str();

这段代码对我来说很好,但是我在其他地方看到这段代码

string str;
char *a=new char[str.length()];
strcpy(a,str.c_str());

我想知道哪个是正确的,为什么?

标签: c++pointersc-str

解决方案


假设类型strstd::string,则代码都不正确。

char *a=str.c_str();

无效,因为c_str()将在不强制转换的情况下返回const char*和删除const(通常const_cast)是无效的。

char *a=new char[str.length()];
strcpy(a,str.c_str());

无效,因为str.length()在分配终止空字符时不计算终止空字符需要使用strcpy().

此处发布的代码中没有悬空指针问题,因为此处没有指针无效。


推荐阅读