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

时间:2012-06-29 14:52:02

标签: c++ string cstring

我正在尝试将int转换为cstring。我决定通过stringstream将int读入常规字符串,然后将字符串读入char数组。以下似乎工作正常,但我想知道我是否只是对我的编译器感到幸运。代码看起来好听吗?谢谢!

int zip = 1234;    

char zipString[30];

stringstream str;

str << zip;

str >> zipString;

cout << zipString;

3 个答案:

答案 0 :(得分:4)

您可以从流的std::string函数中获取C ++ str(),并从字符串的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通常更安全,更容易使用。

答案 1 :(得分:2)

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

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

然后,如果你真的需要将结果作为c风格的字符串,你可以使用zipString.c_str()来获得它(尽管它在某种程度上仍然不同 - 你不能修改它返回的内容)。< / p>

在这种特殊情况下,它不会给你带来太多好处,但是对这个一般订单的转换的一致使用会增加,如果你打算这样做,你也可以在这里使用它。

答案 2 :(得分:1)

std::string的{​​{1}}成员函数返回c_str()(又称C风格的字符串)。

const char*