将字符串转换为 C 样式字符串

Converting string to C style string

本文关键字:字符串 样式 转换      更新时间:2023-10-16

我正在尝试将整数转换为字符串。我决定通过字符串流将 int 读入常规字符串,然后将字符串读入 char 数组。以下内容似乎有效,但我想知道我是否只是对我的编译器很幸运。代码看起来合理吗?谢谢!

int zip = 1234;    
char zipString[30];
stringstream str;
str << zip;
str >> zipString;
cout << zipString;
你可以

从流的str()函数中获取C++ std::string,从字符串的c_str()函数中获取一个不可变的 C 样式零终止字符串:

std::string cpp_string = str.str();
char const * c_string = cpp_string.c_str();
您可能想将它们

组合成一个表达式,str.str().c_str() ,但这是错误的;C++字符串将在您使用指针执行任何操作之前被销毁。

只要您

确定缓冲区足够大,您正在执行的操作就会起作用;但是使用 C++ 字符串消除了缓冲区溢出的危险。通常,最好避免使用 C 样式字符串,除非需要使用需要它们的 API(或者在极端情况下,作为避免内存分配的优化)。 std::string通常更安全,更容易使用。

除非您有特定原因需要字符数组而不是标准字符串,否则我会使用后者。虽然在这种情况下不是绝对必要的,但我通常也会使用 Boost lexical_cast而不是通过字符串流显式移动内容来进行转换:

std::string zipString = lexical_cast<std::string>(zip);

然后,如果你真的需要结果作为 c 样式字符串,你可以使用 zipString.c_str() 来获取它(尽管它在某种程度上仍然不同——你不能修改它返回的内容)。

在这种特定情况下,它不会给你带来很多好处,但在这个一般顺序上持续使用转换加起来,如果你要这样做,你也可以在这里使用它。

std::stringc_str()成员函数返回一个const char*(又名C样式字符串)。

std::string str = "world";
printf("hello, %s", str.c_str());