C++ 将常量char*转换为std::string

C++ 将常量char*转换为std::string,c++,string,char,C++,String,Char,我从一个处理函数返回了一个const char*,我想将它转换/分配给std::string的一个实例,以便进一步操作。这似乎应该是直截了当的,但我还没有找到任何文档来说明应该如何做。显然,我遗漏了一些东西。感谢您的真知灼见。试试看 const char * s = "hello"; std::string str(s); 就可以了。std::string有一个隐式转换const char*的构造函数。在大多数情况下,你什么都不需要做。只需传递一个const char*,其中接受std::

我从一个处理函数返回了一个
const char*
,我想将它转换/分配给
std::string
的一个实例,以便进一步操作。这似乎应该是直截了当的,但我还没有找到任何文档来说明应该如何做。显然,我遗漏了一些东西。感谢您的真知灼见。

试试看

 const char * s = "hello";
 std::string str(s);

就可以了。

std::string
有一个隐式转换
const char*
的构造函数。在大多数情况下,你什么都不需要做。只需传递一个
const char*
,其中接受
std::string
,它就可以工作。

std::string
有一个来自
const char*
的构造函数。这意味着写入以下内容是合法的:

const char* str="hello";
std::string s = str;

有三种可能性。您可以使用构造函数、赋值运算符或成员函数
assign
(如果不考虑成员函数
insert
,也可以使用:)`

比如说

#include <iostream>
#include <string>

const char * f() { return "Hello Fletch"; }

int main()
{
   std::string s1 = f();

   std::string s2;
   s2 = f();

   std::string s3;
   s3.assign( f() );

   std::cout << s1 << std::endl;
   std::cout << s2 << std::endl;
   std::cout << s3 << std::endl;
}
#包括
#包括
const char*f(){返回“Hello Fletch”;}
int main()
{
std::string s1=f();
std::字符串s2;
s2=f();
std::字符串s3;
s3.赋值(f());

你有很多选择:

const char* dosth() { return "hey"; }

string s1 = dosth();
string s2 (dosth());
string s3 {dosth()};
auto   s4 = (string)dosth();
,


请注意,
s3
s4
是C++11的功能,如果您仍然使用旧的或不兼容的编译器,则必须使用其他选项之一。

这是构造函数选项之一,
std::string(const char*cstr)
std::string s=f()
这个问题是由一个无法再复制的问题或一个简单的印刷错误引起的。虽然这里可能有类似的问题,但这个问题是以一种不太可能帮助未来读者的方式解决的。这通常可以通过识别和仔细检查复制问题所需的最短程序来避免重新发布。哇,-5。我不认为这是一个糟糕的问题…哦,好吧。+1:是的-9这个问题有点可笑。另一个问题略有不同,因为它的长度要求可能与许多人无关。我觉得有趣的是,我们选择了相同的示例字符串,几乎相同(只是交换)变量名:-)只需确保您的char*不为NULL,否则行为未定义。它将如何为NULL?@EdHeal它不在您的示例中,但char*通常可以为NULL。我将为其他人留下免责声明。例如,我使用的是getenv()函数。如果环境变量不存在,它将返回null。在构造该函数返回值的字符串之前,需要进行检查。这是相关的,因为OP说他们“从处理函数返回了一个const char*”。请注意,有些示例需要c++11。请确保您的字符*不为NULL,或者行为未定义。请确保您的字符*不为NULL,或者行为未定义。请确保您的字符*不为NULL,或者行为未定义。请确保您的字符*不为NULL,或者行为未定义。请确保您的字符*不为NULL,或者ehavior是未定义的。