Pointer中的Char数组大于初始化?

时间:2014-06-04 22:01:08

标签: c++ arrays bytearray

我已经创建了一个缓冲系统,但是与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

为什么会发生这种情况,我该如何避免呢?

1 个答案:

答案 0 :(得分:4)

原因是您的字符串未NUL终止。将Size初始化为7String[ 6 ] = '\0';

相关问题