将String.data()转换为数组

时间:2010-09-17 18:12:23

标签: c++ arrays string

我想获取一个字符串,并使用其值填充数组。我知道字符串的长度是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]’

4 个答案:

答案 0 :(得分:4)

您需要复制内容:

假设binstd::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()。 (请注意,在访问第一个元素之前,必须检查向量是否为空。)