题
我需要使用一个 std::string
存储检索到的数据 fgets()
. 。为此,我需要转换 char*
返回值来自 fgets()
进入一个 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。
编辑:如果字符串变量已经存在,使用分配():
std::string myString;
char* data = ...;
int size = ...;
myString.assign(data, size);
我需要使用 std::string 来存储 fgets() 检索到的数据。
为什么使用 fgets()
当你进行C++编程时?为什么不 std::getline()
?
约大多数的答案会谈的构建的std::string
。
如果已构造的只是使用赋值运算符强>
std::string oString;
char* pStr;
... // Here allocate and get character string (e.g. 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;
但它可以让你使用汽车,也具有广泛的字符串:
auto mystring = U"your UTF-32 string here"s;
这是它真正的亮点:
string suffix;
cin >> suffix;
string mystring = "mystring"s + suffix;
char* data;
std::string myString(data);
不知道为什么除了埃里克没有人提到这一点,但根据此页,赋值运算符的工作就好了。没有必要使用一个构造函数,.assign(),或.append()。
std::string mystring;
mystring = "This is a test!"; // Assign C string to std:string directly
std::cout << mystring << '\n';
我刚刚与MSVC2005奋力使用std::string(char*)
构造就像收视率最高的答案。当我看到这个版本的#4上始终信任的上市的http:// EN。 cppreference.com/w/cpp/string/basic_string/basic_string ,我想即使是旧的编译器提供了这一点。
我花了这么长时间才意识到,这绝对构造拒不配合(unsigned char*)
作为参数!我得到了失败,以配合std::string
参数类型,这在当时绝对不是我的目标是为这些难以理解的错误消息。只是铸造参数与std::string((char*)ucharPtr)
解决我的问题...咄!