gpt4 book ai didi

c++ - 如果 strncpy 将随机数据复制到缓冲区中会发生什么?

转载 作者:太空狗 更新时间:2023-10-29 23:32:04 27 4
gpt4 key购买 nike

假设您有一个 char 缓冲区,您想要将 std::string 复制到其中。将额外数据复制到字符串范围之外的缓冲区是否会产生后果,即使缓冲区有足够的大小?

例子

std::string my_string = "hello";
char my_buffer[128];
memset(my_buffer, 0, 128);

strncpy(my_buffer, my_string.c_str(), 128);

所以“hello”被复制到 my_buffer 中,但是 my_string 之后的其他 123 个字节的数据也会被复制。这有什么后果吗?缓冲区保存其他数据是否有害?

最佳答案

but so will 123 other bytes of data that comes after my_string

这个假设是不正确的:strncpy 关注源字符串的空终止,从不读取过去的空终止符。剩余的数据将被设置为'\0' 个字符:

destination is padded with zeros until a total of num characters have been written to it. [reference]

这与 memcpy 形成对比,后者要求源和目标都具有足够的大小以避免未定义的行为。

关于c++ - 如果 strncpy 将随机数据复制到缓冲区中会发生什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54331686/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com