c++ - 像 char* const 指针一样分配的数组给出了乱码输出
问题描述
我想弄清楚,为什么我char* const
的不是新的和空的?
char* const a = new char[10];
给我:
\r\r\r�����������
编辑:进行测试,
std::string text = "Hello world!";
int length = text.size();
char* const a = new char[length];
std::memset(a, '\0', length);
std::strncpy(a, s.c_str(), length); // <-- after this, the gibberish comes back.
解决方案
为什么我的 char* const 不是新的和空的?
因为您没有创建一个空数组,而是一个大小为 10 的数组。因此有 10 个元素。
此外,您没有初始化任何元素。更具体地说,您没有将任何元素初始化为空终止符。因此,不能保证您的数组包含以空字符结尾的字符串,因此将其插入字符流会导致未定义的行为。
您可以使用值初始化将所有元素初始化为空终止符:
char* const a = new char[10]();
或者您可以仅对第一个元素执行此操作:
a[0] = '\0';
或者你可以创建一个空的std::string
:
std::string a;
推荐阅读
- javascript - 深承诺.all
- php - 仅使用 PHP 发布后如何保留 textarea 表单值
- perl - Perl中的多个模式的字符串匹配
- python - 检查字符串是否在 json 文件中
- reactjs - React Native:如何将 12.3432523523% 显示为 12.34%?
- docker - 获取远程 docker 镜像的标签
- powershell - Powershell 未显示 PSCustomObjects(或其他对象)的某些属性
- sql - 计算oracle表中每一行的出现次数
- javascript - 如何在 Angular 中添加强大的搜索功能?
- azure - 如何使用 LUIS 和 Azure Bot 服务从 SQL Server 获取数据