2

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

int zip = 1234;    

char zipString[30];

stringstream str;

str << zip;

str >> zipString;

cout << zipString;
4

3 回答 3

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通常更安全,更容易使用。

于 2012-06-29T14:55:54.360 回答
2

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

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

然后,如果您确实需要将结果作为 c 风格的字符串,您可以使用zipString.c_str()它来获取它(尽管它在一种方式上仍然不同——您不能修改返回的内容)。

在这种特定情况下,它不会为您带来很多好处,但在此一般订单上持续使用转换会增加,如果您要这样做,您也可以在这里使用它。

于 2012-06-29T14:59:17.643 回答
1

的成员函数返回一个(又名 C 风格的字符串)std::stringc_str()const char*

std::string str = "world";
printf("hello, %s", str.c_str());
于 2012-06-29T14:56:07.433 回答