C++ stringstream 简化数据类型转换

时间:2023-03-10 04:54:07
C++ stringstream 简化数据类型转换

C++标准库中的<sstream>提供了比ANSI C的<stdio.h>更高级的一些功能,即单纯性、类型安全和可扩展性。

在C++中经常会使用到snprintf来格式化一些输出。为了正确地完成这个任务,必须确保证目标缓冲区有足够大空间以容纳转换完的字符串。此外,还必须使用正确的格式化符。如果使用了不正确的格式化符,会导致非预知的后果。

1. snprintf需要注意buff的大小,以及对返回值的判断

 #include <stdio.h>

 int main(){
char *gcc= "gcc";
int no = ; ///调节char数组的大小可以看到不同的输出。
///因此一定要注意buff的大小, 以及snprintf的返回值
char buff[];
int ret = ;
ret = snprintf(buff, sizeof(buff), "%s is No %d", gcc, no);
if (ret >= 0 && ret < sizeof(buff)){
printf("%s\n", buff);
}
else{
printf("err ret:%d\n", ret);
}
return ;
}

2. 使用stringstream

<sstream>库定义了三种类:istringstream、ostringstream和stringstream,分别用来进行流的输入、输出和输入输出操作

使用stringstream比snprintf更加省心。

std::stringstream比std::string使用更加灵活,支持各种格式。

 #include <stdio.h>
#include <sstream> int main(){
char *gcc= "gcc";
int no = ; std::stringstream stream;
stream << gcc;
stream << " is No ";
stream << no;
printf("%s\n", stream.str().c_str()); stream.str(""); ///重复使用前必须先重置一下
stream << "blog";
stream << ' ';
stream << "is nice";
printf("%s\n", stream.str().c_str());
return ;
}

输出:

C++ stringstream 简化数据类型转换

cplusplus关于snprintf有详细的说明: http://www.cplusplus.com/reference/cstdio/snprintf/?kw=snprintf