std::string str = "hello world!";
char dest[16];
memcpy(dest, str.c_str(), 16);
Run Code Online (Sandbox Code Playgroud)
str.c_str()将返回以null结尾的char数组.但是,如果我调用大于13的memcpy,会发生什么?dest将是一个以null结尾的char数组吗?有什么我需要谨慎的吗?
您的代码具有未定义的行为.使用时memcpy,需要确保复制的字节数不大于min(size_of_recepient,size_of_source).
在您的情况下,源的大小是13个字节,因此复制更多不是好的.
dest将是一个以null结尾的char数组吗?有什么我需要谨慎的吗?
不幸的是,第一部分dest将是一个以null结尾的字符数组,因为str.c_str()返回一个空终止的字符数组......但其余部分dest肯定会包含一些额外的垃圾.
您正在访问您不知道的额外内存... 您的代码可能会重新格式化您的PC ...它称为未定义行为,