【发布时间】:2014-06-05 06:02:08
【问题描述】:
我创建了一个缓冲区系统,但是与 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
为什么会发生这种行为,我该如何避免?
【问题讨论】: