我想获取一个字符串,并使用其值填充数组。我知道字符串的长度是16.我试过了
char *bit_number[16];
bit_number = bin.data();
和
char bit_number[16];
bit_number = bin.data();
我不明白String.data()返回的是什么,为什么我不能直接将其分配给数组?我收到了编译器错误:
error: incompatible types in assignment of ‘const char*’ to ‘char* [16]’
和
error: incompatible types in assignment of ‘const char*’ to ‘char [16]’
答案 0 :(得分:4)
您需要复制内容:
假设bin
是std::string
:
char bit_numer[16];
copy( bin.begin(), bin.end(), bit_number );
然而,这是各种风险。如果您的bin
有17个字符,该怎么办?
顺便说一下,原始代码:
char *bit_number[16];
...不会像您期望的那样分配16个char
的数组。它分配了一个16 char*
的数组。很可能不是你想要的。
答案 1 :(得分:1)
如果你想让dest数组以空值终止,那就是额外的一行代码,也许你的目标数组中有一个额外的字节来容纳它。
在你的第一个例子中,你有一个包含16个char指针的数组。那不是你想要的。
在第二个示例中,您的类型是正确的,但您无法将指针(从data()返回)直接分配给数组,因为它们的类型不兼容 - 您必须将引用的数据从一个位置复制到另一个位置。
答案 2 :(得分:1)
您可以使用std::string::c_str()
来访问char数组,然后使用strcpy
将其移动到新数组。
string s = "1234";
char arr[5] = { 0 };
strcpy(arr, s.c_str());
答案 3 :(得分:1)
无论如何,您需要char
数组?你确定你的字符串适合它吗? (有一大堆错误来自数组的使用,也是一个着名的错误:缓冲区溢出。)你很可能更好地使用动态调整大小的std::vector
:
std::vector<char> v( bin.begin(), bin.end() );
如果你需要数组将它传递给一个不知道如何处理std::vector
的C API函数,你可以通过做一些有点神秘的&v[0]
来访问向量的底层数组。或&*v.begin()
。 (请注意,在访问第一个元素之前,必须检查向量是否为空。)