有没有办法将 cstring 文字(或变量)直接写入现有的 std::array 中?
即,我想做这样的事情:
std::array<unsigned char, 100> test;
// std::copy("testing", test);
// test="testing";
我希望行为是“复制直到复制空终止符或目标缓冲区已满”。
我试图避免执行 strlcpy(test.data()... 因为我正在寻找一种可以应对缓冲区溢出的方法,而不必明确将缓冲区长度作为参数包含在内。
谢谢。
编辑:
这是迄今为止我从建议中找到的最佳解决方案。这仅适用于文字。MSVC 没有统一初始化,所以它需要在 then { 之前添加 =。它还需要缓冲区大小,但如果缓冲区大小不匹配或存在溢出,则编译失败:
#include <array>
#include <algorithm>
#include <iostream>
int main() {
std::array<char, 100> arr1={"testing"};
std::array<char, 100> arr2;
arr2=arr1;
std::cout << arr2.data();
}
这通常适用于字符串,但要小心,因为嵌入的空值不会被复制,并且要包含空值,您必须通过数组构造,即字符串 mystring("junk\0", 5)。
#include <string>
#include <array>
#include <algorithm>
#include <iostream>
int main()
{
const std::string str("testing");
std::array<char, 100> arr;
std::copy(str.begin(), str.end(), arr.begin());
// Note that the null terminator does not get copied.
}