C++ 是否将额外数据从std::string复制到std::array<;字符大小>;未定义的行为?

C++ 是否将额外数据从std::string复制到std::array<;字符大小>;未定义的行为?,c++,memcpy,C++,Memcpy,我并不想在生产环境中使用这段代码,但我对它有点困惑。我认为它一定是未定义的,但是,我运行这段代码时没有崩溃。这只是巧合吗 #包括 #包括 自动主(int argc,字符**argv)->int{ //对于(int i=0;i

我并不想在生产环境中使用这段代码,但我对它有点困惑。我认为它一定是未定义的,但是,我运行这段代码时没有崩溃。这只是巧合吗

#包括
#包括
自动主(int argc,字符**argv)->int{
//对于(int i=0;i<1000;++i){
std::阵列dst;
std::string src=“hello world”;
memcpy(dst.data(),src.c_str(),dst.size());//这是未定义的行为吗?
// }
}
我想它一定没有定义

是的,这是未定义的行为
src.data
指向一个包含12个字符(=12字节)的数组,但是
memcpy
将尝试从中读取1000个字节,因此它读取超出范围

然而,我运行这段代码时没有崩溃

这就是未定义行为的要点。任何事情都有可能发生。这包括运行时没有任何问题

我想它一定没有定义

是的,这是未定义的行为
src.data
指向一个包含12个字符(=12字节)的数组,但是
memcpy
将尝试从中读取1000个字节,因此它读取超出范围

然而,我运行这段代码时没有崩溃


这就是未定义行为的要点。任何事情都有可能发生。这包括运行时完全没有任何问题。

未定义的行为并不意味着“保证崩溃”@StoryTeller UnslanderMonica所以我问
这只是偶然吗?
这是未定义的行为,未定义的行为可能意味着崩溃失败。不过,我不确定我是否会将这种情况描述为巧合。这只是常规的未定义行为。仅供参考,未定义的行为会导致时间旅行,这只是巧合吗?这个问题通常无法回答。这可能是巧合,也可能不是。至少需要研究生成的程序集。在程序集级别,可能不会发生任何非法行为。未定义的行为并不意味着“保证崩溃”@StoryTeller UnslanderMonica,所以我问
这只是一个意外吗?
这是未定义的行为,未定义的行为可能意味着崩溃失败。不过,我不确定我是否会将这种情况描述为巧合。这只是常规的未定义行为。仅供参考,未定义的行为会导致时间旅行,这只是巧合吗?这个问题通常无法回答。这可能是巧合,也可能不是。至少需要研究生成的程序集。在程序集级别,可能不会发生任何非法行为。