字符串结束字符会损坏内存吗?缓冲区[大小]='\0';

does string end character corrupt memory? buffer[size]='';

本文关键字:大小 缓冲区 字符 结束 损坏 内存 字符串      更新时间:2023-10-16
char * buffer = new char[SIZE];
memcpy(buffer , somedata , SIZE);
buffer[SIZE]='';

最后一行会损坏内存吗?buffer是SIZE长度,我们将把一些数据放在这个范围之外。有人能为我解释一下吗?

是的,这是未定义的行为。你的写作超出了法律规定的范围。

数组在C++中是基于0的,这意味着索引0到SIZE-1是有效的。

最后一行会损坏内存吗?

是的。

缓冲区是SIZE长度,我们将把一些数据放在这个范围之外。

正确。

有人能为我解释一下吗?

缓冲区是SIZE长度,我们将把一些数据放在这个范围之外。

如果您想在size索引处为"\0"字符留出空间,请创建大小为size+1的缓冲区。

是的,它会破坏内存。如果数据不是以零结尾,并且您希望自己附加0,则数组大小必须比数据大一。而且索引是从零开始的,所以要设置缓冲区[SIZE],字符数必须是SIZE+1。
char* buffer = new char[SIZE+1];
//                          ^^ 
memcpy( buffer, somedata, SIZE );
buffer[SIZE]='';