将字符串转换为 C 样式字符串
Converting string to C style string
我正在尝试将整数转换为字符串。我决定通过字符串流将 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::string
的c_str()
成员函数返回一个const char*
(又名C样式字符串)。
std::string str = "world";
printf("hello, %s", str.c_str());