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

简介: C++标准库中的提供了比ANSI C的更高级的一些功能,即单纯性、类型安全和可扩展性。在C++中经常会使用到snprintf来格式化一些输出。为了正确地完成这个任务,必须确保证目标缓冲区有足够大空间以容纳转换完的字符串。

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

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

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

 1 #include <stdio.h>
 2 
 3 int main(){
 4     char *gcc= "gcc";
 5     int no = 1;
 6 
 7     ///调节char数组的大小可以看到不同的输出。
 8     ///因此一定要注意buff的大小, 以及snprintf的返回值
 9     char buff[10];
10     int ret = 0;
11     ret = snprintf(buff, sizeof(buff), "%s is No %d", gcc, no);
12     if (ret >= 0 && ret < sizeof(buff)){
13         printf("%s\n", buff);
14     }
15     else{
16         printf("err ret:%d\n", ret);
17     }
18     return 0;
19 }

2. 使用stringstream

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

使用stringstream比snprintf更加省心。

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

 1 #include <stdio.h>
 2 #include <sstream>
 3 
 4 int main(){
 5     char *gcc= "gcc";
 6     int no = 1;
 7 
 8     std::stringstream stream;
 9     stream << gcc;
10     stream << " is No ";
11     stream << no;
12     printf("%s\n", stream.str().c_str());
13 
14     stream.str(""); ///重复使用前必须先重置一下
15     stream << "blog";
16     stream << ' ';
17     stream << "is nice";
18     printf("%s\n", stream.str().c_str());
19     return 0;
20 }

输出:

 

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

 

相关文章
|
2月前
|
存储 安全 C++
C++ 用户输入与数据类型详解:建立基本计算器及变量类型
了解C++的用户输入和数据类型。使用`cin`从键盘读取数据,如在简单计算器示例中获取两个数字并求和。C++的数据类型包括:`int`(整数)、`float`(浮点数,约6-7位小数)、`double`(更精确的浮点数,约15位小数)、`bool`(布尔值,true或false)、`char`(单个字符)和`string`(文本字符串)。每种类型都有特定的存储大小和用途。在处理浮点数时,`double`通常更安全。字符串需要包含`&lt;string&gt;`库。更多内容可关注微信公众号`Let us Coding`获取。
40 0
|
2月前
|
存储 安全 编译器
C++系列二:数据类型
C++系列二:数据类型
|
2月前
|
存储 C++
C/C++数据类型从0到内存具体分配详解
C/C++数据类型从0到内存具体分配详解
|
9天前
|
存储 编译器 C++
C++从入门到精通:1.1.2基础语法之数据类型
C++从入门到精通:1.1.2基础语法之数据类型
|
10天前
|
存储 安全 编译器
C/C++(2)基本语法和数据类型
C/C++(2)基本语法和数据类型
3 0
|
18天前
|
C++
C/C++】如何不使用 sizeof 求数据类型占用的字节数
C/C++】如何不使用 sizeof 求数据类型占用的字节数
|
25天前
|
存储 程序员 C++
C++数据类型
C++数据类型
|
2月前
|
存储 安全 编译器
【C/C++ 基本数据类型】C++ 基本数据类型深度解析与C语言对比
【C/C++ 基本数据类型】C++ 基本数据类型深度解析与C语言对比
59 0
|
2月前
|
存储 编译器 程序员
C++基本数据类型
C++基本数据类型
|
2月前
|
存储 算法 C++
c++复合数据类型
c++复合数据类型