c++ - 是否将 std::string 中的额外数据 memcopy 到 std::array未定义的行为?
问题描述
我并不是说要在生产环境中使用这段代码,但我对此有点困惑。我认为它一定是未定义的,但是,我运行这段代码没有崩溃。这只是巧合吗?
#include <array>
#include <string>
auto main(int argc, char** argv) -> int {
// for (int i = 0; i < 1000; ++i) {
std::array<char, 1000> dst;
std::string src = "hello world";
memcpy(dst.data(), src.c_str(), dst.size()); // is this undefined behavior?
// }
}
解决方案
我认为它必须是未定义的
是的,这是未定义的行为。src.data
指向一个包含 12 个字符(=12 个字节)的数组,但memcpy
会尝试从中读取 1000 个字节,因此它会越界读取。
但是,我运行这段代码没有崩溃
这就是未定义行为的意义所在。任何事情都可能发生。这包括完全没有任何问题的运行。
推荐阅读
- c# - 如何随机调用函数unity c#
- php - Safari 在跳转链接后返回丢失的图像 [HTML/CSS]
- python - 获取 DecisionTreeRegressor 中终端(叶)节点的所有值
- r - 我尝试使用 glm 的输出进行自动绘图,但出现此错误。Ps:我尝试安装“ggfortify”,但它并没有解决我的问题
- php - Laravel,自动登录时不会调用经过身份验证的方法
- react-native - 强制应用程序在博览会中重新启动反应本机
- sql - 在while循环中左连接表并动态命名再次用于左连接的新表
- lotus-domino - 我无法让辅助代理在 WebQueryOpen 事件上运行
- python - 在不安装 Python 的情况下运行 Python 脚本
- python - 尝试从类的所有实例访问布尔变量