我需要在C语言中输出“hello world”。如何实现?
string a = "hello ";
const char *b = "world";
const char *C;
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给出的信息。
如果您已经有了字符串(或const char *
,但我建议将后者转换为前者),您可以将它们“相加”以形成更长的字符串。但是,如果您想要附加除已有字符串之外的内容,则可以使用stringstream
及其operator<<
,它的工作原理与cout
的一样,但不会将文本打印到标准输出(即控制台),而是打印到它的内部缓冲区中,您可以使用它的.str()
方法从中获取std::string
。
std::string::c_str()
函数返回包含在其中的字符串的指向const char
缓冲区(即const char *
)的指针,该指针以空字符结尾。然后,您可以像使用任何其他const char *
变量一样使用它。
如果只需要连接字符串,那么可以使用 operator +
和 operator +=
函数。
#include <string>
///...
std::string str="foo";
std::string str2=str+" bar";
str+="bar";
但是,如果您需要执行大量字符串拼接操作,则可以使用字符串流(string stream)。
#include <sstream>
//...
std::string str1="hello";
std::stringstream ss;
ss << str1 << "foo" << ' ' << "bar" << 1234;
std::string str=ss.str();
编辑:然后你可以将该字符串传递给一个使用c_str()
的C函数,以便接受const char *
类型的参数。
my_c_func(str1.c_str());
如果 C 函数接受非 const char* 或需要所有权,则可以执行以下操作:
char *cp=std::malloc(str1.size()+1);
std::copy(str1.begin(), str2.end(), cp);
cp[str1.size()]='\0';
const char *C = (a + b).c_str();
。它不会修改string a
。 - iammilind(a + b).c_str()
会让C
指向无效的内存,因为+
创建了一个临时的string
,当语句结束时,该临时对象将超出作用域并被销毁。将(a + b).c_str()
传递给函数参数时,这没有问题,但是赋值给变量时就不行。 - Remy Lebeau