char * buffer = new char[SIZE];
memcpy(buffer , somedata , SIZE);
buffer[SIZE]='\0';
最后一行会损坏内存吗?
buffer
是SIZE长度,我们将一些数据放在此范围之外。
有人可以帮我解释一下吗?
答案 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';