将char *转换为std :: string
我需要使用std::string
来存储由fgets()
检索的数据。 为此,我需要将fgets() char*
输出转换为一个std::string
来存储在一个数组中。 如何才能做到这一点?
std::string
有一个这样的构造函数:
const char *s = "Hello, World!"; std::string str(s);
只要确保你的char *
不是NULL
,否则行为是未定义的。
如果你已经知道了char *的大小,那就用这个
char* data = ...; int size = ...; std::string myString(data, size);
这不使用strlen。
编辑:如果stringvariables已经存在,使用assign():
std::string myString; char* data = ...; int size = ...; myString.assign(data, size);
我需要使用std :: string来存储由fgets()检索的数据。
为什么在编程C ++时使用fgets()
? 为什么不std::getline()
?
大多数答案都是关于构造 std::string
。
如果已经构build, 只需使用赋值运算符 。
std::string oString; char* pStr; ... // Here allocate and get character string (eg using fgets as you mentioned) oString = pStr; // This is it! It copies contents from pStr to oString
通过构造函数传入:
const char* dat = "my string!"; std::string my_string( dat );
你可以使用函数string.c_str()去另一种方式:
std::string my_string("testing!"); const char* dat = my_string.c_str();
const char* charPointer = "Hello, World!\n"; std::string strFromChar; strFromChar.append(charPointer); std::cout<<strFromChar<<std::endl;
char* data; stringstream myStreamString; myStreamString << data; string myString = myStreamString.str(); cout << myString << endl;
我想提一个使用用户定义文字s
新方法。 这不是新的,但它会更常见,因为它是在C ++ 14标准库中添加的。
在一般情况下大多是多余的:
string mystring = "your string here"s;
但它允许你使用自动,也与宽string:
auto mystring = U"your UTF-32 string here"s;
这里是真正闪耀的地方:
string suffix; cin >> suffix; string mystring = "mystring"s + suffix;
我刚刚与MSVC2005苦苦挣扎,使用std::string(char*)
构造函数就像顶级答案一样。 正如我看到这个变种列在总是受信任的http://en.cppreference.com/w/cpp/string/basic_string/basic_string#4 ,我甚至认为,一个旧的编译器提供了这个。
我花了这么长时间才意识到,这个构造函数绝对拒绝匹配(unsigned char*)
作为参数! 我得到了这些令人难以理解的错误信息,无法匹配std::string
参数types,这绝对不是我想要的。 只需使用std::string((char*)ucharPtr)
来parsing我的问题…呃!
char* data; std::string myString(data);
不知道为什么除了Erik没有人提到这个,但根据这个页面 ,赋值运算符工作得很好。 不需要使用构造函数,.assign()或.append()。
std::string mystring; mystring = "This is a test!"; // Assign C string to std:string directly std::cout << mystring << '\n';