指针中的Char数组大于初始值

Char Array in Pointer larger than initialized?

本文关键字:大于 数组 Char 指针      更新时间:2023-10-16

我已经创建了一个缓冲区系统,但是与c#相比,确定从缓冲区读取的字符串相当困难。让我们考虑以下为数组创建char*的代码:

int Size = 6;
char* String = new char[ Size ]();

将创建一个指针,指向一个指定大小的全新数组。但是,如果我尝试访问超出该大小的索引,则不会显示越界错误:

String[ Size + 1 ];

相反,例如,我可以"打印"数组,就好像它是一个字符串:

String[ 0 ] = 'S';
String[ 1 ] = 'T';
String[ 2 ] = 'R';
String[ 3 ] = 'I';
String[ 4 ] = 'N';
String[ 5 ] = 'G';
cout << String << endl;

但是,这不仅会打印原数组中的字符,还会打印不在原数组中的随机字符,例如索引中超出数组边界的字符:(示例)

STRING&^%(^$$#%$*

代替:

STRING

为什么会发生这种行为,我该如何避免它?

原因是您的字符串不是NUL终止的。初始化Size7String[ 6 ] = '';