我正在尝试将int转换为cstring。我决定通过stringstream将int读入常规字符串,然后将字符串读入char数组。以下似乎工作正常,但我想知道我是否只是对我的编译器感到幸运。代码看起来好听吗?谢谢!
int zip = 1234;
char zipString[30];
stringstream str;
str << zip;
str >> zipString;
cout << zipString;
答案 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*