C ++创建一个长度可变的数组会生成随机大小的数组

时间:2019-04-06 20:30:50

标签: c++ arrays pointers

我正在使用char数组重新创建字符串类。我的问题是,当我为更大的数组分配内存时,它生成的数组大小完全错误。

例如:

int allocated = 4;
char * reservedString = new char[allocated];
cout << strlen(reservedString);

reservedString不会创建大小为4的字符数组,而是指向具有14个包含随机字符的点的字符数组。

enter image description here

这是调试显示的内容。现在,保留字符串的大小错误,其中包含一堆随机字符。当我尝试使用strcpy或strcpy_s时,由于新的数组大小错误,导致内存写越界。

如何创建长度未知的char数组,该数组由大小正确的变量提供。 我不能使用std :: string类或std :: vector。

2 个答案:

答案 0 :(得分:1)

使用new运算符创建对象时,数据仍未初始化。您提供的代码基本上是字节数组。

有关strlen的文档说:

  

计算字符串的长度,直到(但不包括终止的空字符)。

这里没有空终止符。

您应该这样做:

int allocated = 4;
char * reservedString = new char[allocated]();

这将初始化您的数组并将所有元素设置为\0

答案 1 :(得分:1)

strlen期望以空字符结尾的字符串,这表示以空字符(\0)结尾的字符串。您将传递给它的指针指向新分配的内存,该内存包含未初始化的值(基本上是随机的,但从技术上讲是“中间”的,读取它会导致未定义的行为)。因此,当strlen搜索空字符以确定字符串的长度时,就会出错。

除非确定数组将以空字符或类似字符终止,否则无法确定仅提供指向数组的大小。因此,要么使用以null终止的字符串正确初始化数组,要么自己跟踪长度。