21

我需要把“你好世界”放在c中。我怎样才能做到这一点 ?

string a = "hello ";
const char *b = "world";

const char *C;
4

2 回答 2

40
string a = "hello ";
const char *b = "world";
a += b;
const char *C = a.c_str();

或不修改a

string a = "hello ";
const char *b = "world";
string c = a + b;
const char *C = c.c_str();

很少编辑,以匹配111111给出的信息量。

当您已经拥有strings(或const char *s,但我建议将后者转换为前者)时,您可以将它们“相加”以形成更长的字符串。但是,如果你想附加的不仅仅是你已经拥有的字符串,你可以使用stringstreamand it's operator<<,它与 's 完全一样cout,但不会将文本打印到标准输出(即控制台),而是打印到它的内部缓冲区您可以使用它的.str()方法从中获取std::string

std::string::c_str()函数返回指向其中包含的字符串的const char缓冲区(即const char *)的指针,该字符串以空值结尾。然后,您可以将其用作任何其他const char *变量。

于 2012-04-20T13:29:48.333 回答
9

如果您只需要连接,则使用operator +andoperator +=函数

 #include <string>
 ///...
 std::string str="foo";
 std::string str2=str+" bar";
 str+="bar";

但是,如果您有很多连接要做,那么您可以使用字符串流

#include <sstream>
//...
std::string str1="hello";
std::stringstream ss;
ss << str1 << "foo" << ' ' << "bar" << 1234;
std::string str=ss.str();

编辑:然后您可以将字符串传递给const char *带有 with的 C 函数c_str()

my_c_func(str1.c_str());

如果 C func 采用非 const char * 或需要所有权,您可以执行以下操作

char *cp=std::malloc(str1.size()+1);
std::copy(str1.begin(), str2.end(), cp);
cp[str1.size()]='\0';
于 2012-04-20T13:32:03.033 回答