Abr*_*ile 1 c++ string buffer memcpy
我正在使用C++中的指针和缓冲区来检查我的技能.我尝试了下面的代码,一切正常.没有泄漏,没有崩溃,没有.
说实话,我没想到这一点.
当我打电话时,char* buf2 = new char[strlen(buf)]我没想到srlen(buf)返回合适的尺寸.我一直认为strlen
需要一个以NULL结尾的字符串才能工作.这不是这样的,为什么它正在使用这段代码?
int main(){
const char* mystr = "mineminemine";
char* buf = new char[strlen(mystr)];
memcpy(buf, mystr, strlen(mystr));
char* buf2 = new char[strlen(buf)];
memcpy(buf2, buf, strlen(buf));
delete[] buf2;
delete[] buf;
}
Run Code Online (Sandbox Code Playgroud)
这称为未定义的行为 - 程序似乎有效,但你不能依赖它.
当分配内存时,会在某处发生一个空字符,该字符足够接近缓冲区的起始位置,并且程序可以在技术上访问该空字符和缓冲区起点之间的所有内存,这样您就不会发现崩溃.
你不能依赖这种行为.不要编写这样的代码,总是分配足够的空间来存储终止空字符.
| 归档时间: |
|
| 查看次数: |
144 次 |
| 最近记录: |