kar*_*lip 41 c++ arrays string copy null-terminated
如果数组是以null结尾的,那么这将非常简单:
unsigned char u_array[4] = { 'a', 's', 'd', '\0' };
std::string str = reinterpret_cast<char*>(u_array);
std::cout << "-> " << str << std::endl;
Run Code Online (Sandbox Code Playgroud)
但是,我想知道复制非null终止的 unsigned char数组的最合适方法是什么,如下所示:
unsigned char u_array[4] = { 'a', 's', 'd', 'f' };
Run Code Online (Sandbox Code Playgroud)
进入std::string.
有没有办法在没有迭代unsigned char数组的情况下做到这一点?
谢谢你们.
CB *_*ley 52
std::string有一个构造函数,它接受一对迭代器,并且unsigned char可以转换(以实现定义的方式),char这样就可以了.没有必要reinterpret_cast.
unsigned char u_array[4] = { 'a', 's', 'd', 'f' };
#include <string>
#include <iostream>
#include <ostream>
int main()
{
std::string str( u_array, u_array + sizeof u_array / sizeof u_array[0] );
std::cout << str << std::endl;
return 0;
}
Run Code Online (Sandbox Code Playgroud)
当然,"数组大小"模板函数比sizeof计算更健壮.
kar*_*lip 18
好吧,显然std :: string有一个可以在这种情况下使用的构造函数:
std::string str(reinterpret_cast<char*>(u_array), 4);
Run Code Online (Sandbox Code Playgroud)
小智 6
当在不指定大小的情况下构造字符串时,构造函数将遍历一个字符数组并查找空终止符,即'\0'字符。如果没有该字符,则必须明确指定长度,例如:
// --*-- C++ --*--
#include <string>
#include <iostream>
int
main ()
{
unsigned char u_array[4] = { 'a', 's', 'd', 'f' };
std::string str (reinterpret_cast<const char *> (u_array),
sizeof (u_array) / sizeof (u_array[0]));
std::cout << "-> " << str << std::endl;
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
44895 次 |
| 最近记录: |