我已经创建了一个缓冲系统,但是与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
为什么会发生这种情况,我该如何避免呢?
答案 0 :(得分:4)
原因是您的字符串未NUL
终止。将Size
初始化为7
和String[ 6 ] = '\0';