c++ - 此代码中是否存在悬空指针问题?
问题描述
string str;
char *a=str.c_str();
这段代码对我来说很好,但是我在其他地方看到这段代码
string str;
char *a=new char[str.length()];
strcpy(a,str.c_str());
我想知道哪个是正确的,为什么?
解决方案
假设类型str
为std::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()
.
此处发布的代码中没有悬空指针问题,因为此处没有指针无效。
推荐阅读
- ssh - SFTP - 从 WinSCP 到终端访问
- solr - 字段“location_0_coordinate”的意外文档值类型 NONE(应为 [BINARY、NUMERIC、SORTED、SORTED_NUMERIC、SORTED_SET] 之一)
- doctrine-orm - 当表使用通用外键模式时如何设置 Doctrine 实体关联?
- java - 过滤时listView中EditText的值搞砸了
- nginx - 使用 nginx 服务器部署 rails 应用程序后出错
- c - 搜索最大平方算法中的优化函数
- jasmine - “typeof jasmine”类型不存在属性“结果”
- vba - VBA向下复制信息但循环
- c++ - 如何在字符串和分类器对象 ptr 之间创建映射
- android - 无障碍服务没有看到覆盖