字符串结束字符损坏内存?缓冲液[尺寸] = '\ 0';

时间:2013-02-17 14:22:36

标签: c++

char * buffer = new char[SIZE];
memcpy(buffer , somedata , SIZE);

buffer[SIZE]='\0';

最后一行会损坏内存吗? buffer是SIZE长度,我们将一些数据放在此范围之外。 有人可以帮我解释一下吗?

4 个答案:

答案 0 :(得分:3)

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

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

答案 1 :(得分:3)

  

最后一行会破坏内存吗?

  

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

正确。

  

有人可以帮我解释一下吗?

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

答案 2 :(得分:1)

如果您希望SIZE索引处的'\ 0'字符有空间,请创建大小为SIZE + 1的缓冲区。

答案 3 :(得分:1)

是的它破坏了记忆。如果数据未终止并且您想要自己附加0,则数组大小必须大于数据大小。索引也是基于零的,所以要设置缓冲区[SIZE],字符数必须是SIZE + 1.

char* buffer = new char[SIZE+1];
//                          ^^ 
memcpy( buffer, somedata, SIZE );
buffer[SIZE]='\0';