const char*src ="你好";
调用strlen(src);返回大小为5 ...
现在说我这样做:
char* dest = new char[strlen(src)];
strcpy(dest, src);
Run Code Online (Sandbox Code Playgroud)
这似乎不应该工作,但当我输出一切看起来正确.好像我最后没有为空终结器分配空间......这是对的吗?谢谢
这似乎不应该工作,但当我输出一切看起来正确.
欢迎来到未定义行为的世界.当你这样做时,任何事情都可能发生.您的程序可能会崩溃,您的计算机可能会崩溃,您的计算机可能会爆炸,恶魔可能会飞出你的鼻子.
最糟糕的是,你的程序可以运行得很好,不显眼地看起来它正常工作,直到有一天它开始吐出垃圾,因为它在某处覆盖了敏感数据,因为在某个地方,有人为它们的数组分配了太少的字符,以及现在你已经损坏了堆,并且你在一百万英里之外的某个地方遇到了一个段错误,甚至更糟糕的是你的程序很快就会随着一堆损坏的堆积而突然出现,而且你的功能在损坏的信用卡号码上运行,你会遇到很大麻烦.
即使看起来它有效,但事实并非如此.这是未定义的行为.避免它,因为你永远无法确定它会做什么,即使它在你尝试它时它做了什么也没关系,它可能在另一个平台上没有问题.
| 归档时间: |
|
| 查看次数: |
1591 次 |
| 最近记录: |