gpt4 book ai didi

c++ - 如何避免 strcpy_s 缓冲区太小

转载 作者:太空宇宙 更新时间:2023-11-04 05:26:12 25 4
gpt4 key购买 nike

我需要将std::string 数据 复制到一个char 数组中。我的字符串的长度是可变的,但我的 char 数组的长度是固定的。

const int SIZE = 5;

char name[SIZE];
std::string data = "1234567890";

strcpy_s(name, 5, data.c_str()); //causes a buffer is too small assertion
strcpy_s(name, 11, data.c_str());//copies fine (length of data plus null)
strcpy_s(name, sizeof(data), data.c_str()); // copies fine

如何每次只安全地复制数组的长度?没有得到断言,也没有导致缓冲区溢出。

我应该每次都这样做吗?

std::string toCopy = data.substr(0,SIZE-1);
strcpy_s(name, toCopy.c_str());

最佳答案

使用strncpy_s使用 _TRUNCATE

例如:

strncpy_s(name, data.c_str(), _TRUNCATE);

将尽可能多地复制以填充 name 缓冲区,同时仍将空终止考虑在内(与传统的 strncpy 不同)。

关于c++ - 如何避免 strcpy_s 缓冲区太小,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26308594/

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