首页 > 解决方案 > 像 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.

标签: c++c++11c++14c++17

解决方案


为什么我的 char* const 不是新的和空的?

因为您没有创建一个空数组,而是一个大小为 10 的数组。因此有 10 个元素。

此外,您没有初始化任何元素。更具体地说,您没有将任何元素初始化为空终止符。因此,不能保证您的数组包含以空字符结尾的字符串,因此将其插入字符流会导致未定义的行为。

您可以使用值初始化将所有元素初始化为空终止符:

 char* const a = new char[10]();

或者您可以仅对第一个元素执行此操作:

a[0] = '\0';

或者你可以创建一个空的std::string

std::string a;

推荐阅读