在C语言中我们可以用itoa()和sprintf()函数将整形变量转换为字符串,但是两个函数在转换的时候,都得先给出保存的空间,转换格式不匹配时,可能还会得到错误的结果,甚至程序崩溃。
//整形转换为字符串格式储存在s1中
int n = 123456;
char s1[32];
_itoa(n, s1, 10);
//整形转换为字符串
int value = atoi(s1);
char buffer[20];
sprintf(buffer, "value = %d", value);
在c++中可以使用stringstream避开这类问题,使用stringstream必须包含头文件sstream
//stingstream可以把整数转换为字符串,多次转换用clear()清空
stringstream ss;
int n = 123456;
ss << n;
string str_int;
ss >> str_int;
ss.clear();
cout << ss.str() << endl;//clear并没有把底层string清空,可以使用s.str("")将底层的string对象
ss.str("");
cout << ss.str() << endl;
stringstream使用string类对象代替字符数组,可以避免缓冲区的危险,而且会对参数类型进行推演,不需要格式化控制,也不会出现格式化失败的风险,使用更方便安全。