从 std::string 到 std::array<char,size> 的 memcopy 额外数据是未定义的行为吗?
Is memcopy extra data from std::string to std::array<char,size> an undefined behavior?
我并不是要在生产环境中使用这段代码,但我有点困惑 it.I 认为它一定是未定义的,但是,我 运行 这段代码没有 crash.Is这只是巧合?
#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?
// }
}
I thought it must be undefined
是的,这是未定义的行为。 src.data
指向一个包含 12 个字符(=12 字节)的数组,但 memcpy
将尝试从中读取 1000 个字节,因此读取超出范围。
however, I ran this code without crash
这就是未定义行为的意义所在。任何事情都可能发生。这包括 运行 完全没有问题。
我并不是要在生产环境中使用这段代码,但我有点困惑 it.I 认为它一定是未定义的,但是,我 运行 这段代码没有 crash.Is这只是巧合?
#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?
// }
}
I thought it must be undefined
是的,这是未定义的行为。 src.data
指向一个包含 12 个字符(=12 字节)的数组,但 memcpy
将尝试从中读取 1000 个字节,因此读取超出范围。
however, I ran this code without crash
这就是未定义行为的意义所在。任何事情都可能发生。这包括 运行 完全没有问题。