像 char* const 指针一样分配的数组给出乱码输出
Array allocated like char* const pointer gives Gibberish output
我想弄明白,为什么我的 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, '[=12=]', length);
std::strncpy(a, s.c_str(), length); // <-- after this, the gibberish comes back.
why my char* const isn't new and empty?
因为您创建的不是空数组,而是大小为 10 的数组。因此有 10 个元素。
此外,您没有初始化任何元素。更具体地说,您没有将任何元素初始化为空终止符。因此,不能保证您的数组包含以空字符结尾的字符串,因此将其插入字符流会导致未定义的行为。
您可以使用值初始化将所有元素初始化为空终止符:
char* const a = new char[10]();
或者您可以只对第一个元素执行此操作:
a[0] = '[=11=]';
或者您可以创建一个空的 std::string
:
std::string a;
我想弄明白,为什么我的 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, '[=12=]', length);
std::strncpy(a, s.c_str(), length); // <-- after this, the gibberish comes back.
why my char* const isn't new and empty?
因为您创建的不是空数组,而是大小为 10 的数组。因此有 10 个元素。
此外,您没有初始化任何元素。更具体地说,您没有将任何元素初始化为空终止符。因此,不能保证您的数组包含以空字符结尾的字符串,因此将其插入字符流会导致未定义的行为。
您可以使用值初始化将所有元素初始化为空终止符:
char* const a = new char[10]();
或者您可以只对第一个元素执行此操作:
a[0] = '[=11=]';
或者您可以创建一个空的 std::string
:
std::string a;