问答中心分类: C++将 char* 转换为 std::string
0
匿名用户 提问 40分钟 前

我需要使用std::string存储检索到的数据fgets().为此,我需要将char*返回值来自fgets()成一个std::string存储在一个数组中。如何才能做到这一点?

12 Answers
0
Eugene 回答 40分钟 前

如果您已经知道 char* 的大小,请改用它

char* data = ...;
int size = ...;
std::string myString(data, size);

这不使用 strlen。
编辑:如果字符串变量已经存在,使用assign():

std::string myString;
char* data = ...;
int size = ...;
myString.assign(data, size);
IcedDante 回复 40分钟 前

一个附带问题,尤金。如果数据直到在例程的后期才填充,那么你如何初始化 myString 呢?您是否只是在填充 myString 变量时声明它?

Vlad 回复 40分钟 前

int 大小 = strlen(数据);

Eugene 回复 40分钟 前

@vlad:想法是您知道来自其他来源的大小和/或数据不是C字符串(嵌入了空值或不以空值结尾)。如果你有一个 C 字符串,你可以简单地做 myString = data;它将为您运行 strlen 或等效的。

huseyin tugrul buyukisik 回复 40分钟 前

所以我们不需要删除数据?字符串稍后会处理吗?

Eugene 回复 40分钟 前

@huseyintugrulbuyukisik您仍然需要正确处理原始内存- std::string 将复制字节,它不占用所有权。

huseyin tugrul buyukisik 回复 40分钟 前

@Eugene 谢谢你。现在我100%确定了。我有一个 debug-dll release-exe 问题,它与一些 allocate-in-dll、release-in-exe 类型的函数有问题。

Zack Lee 回复 40分钟 前

它是做浅拷贝还是深拷贝?

Eugene 回复 40分钟 前

@ZackLee 它将为字节分配新内存并将它们全部复制到那里,尽可能深。如果您想要潜在的浅拷贝,您需要将一个 std::string 复制到另一个。然后我认为一些实现可以做一个浅拷贝。

0
Atul 回答 40分钟 前

大多数答案都在谈论建设 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
0
Paul 回答 40分钟 前

我需要使用 std::string 来存储 fgets() 检索到的数据。

为什么使用fgets()当你在编程 C++ 时?为什么不std::getline()?

0
James Thompson 回答 40分钟 前

通过构造函数传入:

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();
Steve Jessop 回复 39分钟 前

c_str()返回const char*

Carson Myers 回复 39分钟 前

对,您不能(不应该)通过 c_str() 修改 std::string 中的数据。如果您打算更改数据,则 c_str() 中的 c 字符串应该是 memcpy'd

0
user1629342user1629342 回答 39分钟 前
const char* charPointer = "Hello, World!\n";
std::string strFromChar;
strFromChar.append(charPointer);
std::cout<<strFromChar<<std::endl;