- 浏览: 369922 次
- 性别:
- 来自: 苏州
文章分类
- 全部博客 (335)
- C++ (190)
- 设计模式 (43)
- 数据库技术 (5)
- 网络编程 (11)
- 自动化测试 (6)
- Linux (13)
- OpenSSL (10)
- MS Crypt API (5)
- SCM (2)
- English (4)
- Android (10)
- EMV规范 (1)
- Saturn Platform (0)
- C (10)
- SQL (2)
- ASP.NET (3)
- 英语口语学习 (3)
- 调试工具 (21)
- 编译技术 (5)
- UML (1)
- 项目管理 (5)
- 敏捷开发 (2)
- Http Server (6)
- 代码审查、代码分析 (5)
- 面试基础 (10)
- 重点知识 (16)
- STL (6)
- Efficient C++资料 (8)
- 数据结构和算法 (7)
- 读书笔记 (0)
- 开源项目 (4)
- 多线程 (2)
- Console App (6)
- 个人开源项目 (4)
- IBM DevelopWorks (4)
- Java (16)
- 内存泄漏相关调试和检测 (13)
- 软件测试相关技术 (2)
- C# (11)
- Apple Related (1)
- 软件测试和管理 (2)
- EMV (1)
- Python (1)
- Node.js (6)
- JavaScript (5)
- VUE (1)
- Frontend (1)
- Backend (4)
- RESTful API (3)
- Firebase (3)
最新评论
-
u013189503:
来个密码吧
[C++][Logging] 项目中写日志模块的实现 -
wyf_vc:
来个密码啊!!
[C++][Logging] 项目中写日志模块的实现
转自
http://blog.csdn.net/lanxuezaipiao/article/details/16358159
一、简单介绍
ostringstream是C++的一个字符集操作模板类,定义在sstream.h头文件中。ostringstream类通常用于执行C风格的串流的输出操作,格式化字符串,避免申请大量的缓冲区,替代sprintf。
派生关系图:
二、ostringstream的基本使用
ostringstream的构造函数形式:
有时候,我们需要格式化一个字符串,但通常并不知道需要多大的缓冲区。为了保险常常申请大量的缓冲区以防止缓冲区过小造成字符串无法全部存储。这时我们可以考虑使用ostringstream类,该类能够根据内容自动分配内存,并且其对内存的管理也是相当的到位。取得std::ostringstream里的内容可以通过str()和str(string&)成员函数。
三、注意事项
std::ostringstream::str()返回的是临时对象,不能对其直接操作。
例如会有如下误用:
注意pBuffer指向的内存已被析构!!
四、代码测试
运行结果
http://blog.csdn.net/lanxuezaipiao/article/details/16358159
一、简单介绍
ostringstream是C++的一个字符集操作模板类,定义在sstream.h头文件中。ostringstream类通常用于执行C风格的串流的输出操作,格式化字符串,避免申请大量的缓冲区,替代sprintf。
派生关系图:
二、ostringstream的基本使用
ostringstream的构造函数形式:
explicit ostringstream ( openmode which = ios_base::out ); explicit ostringstream ( const string & str, openmode which = ios_base::out );
有时候,我们需要格式化一个字符串,但通常并不知道需要多大的缓冲区。为了保险常常申请大量的缓冲区以防止缓冲区过小造成字符串无法全部存储。这时我们可以考虑使用ostringstream类,该类能够根据内容自动分配内存,并且其对内存的管理也是相当的到位。取得std::ostringstream里的内容可以通过str()和str(string&)成员函数。
三、注意事项
std::ostringstream::str()返回的是临时对象,不能对其直接操作。
例如会有如下误用:
const char * pBuffer = oss.str().c_str();
注意pBuffer指向的内存已被析构!!
四、代码测试
<span style="font-size:18px;">#include <sstream> #include <string> #include <iostream> #include <sstream> using namespace std; void main() { ostringstream ostr1; // 构造方式1 ostringstream ostr2("abc"); // 构造方式2 /*---------------------------------------------------------------------------- *** 方法str()将缓冲区的内容复制到一个string对象中,并返回 ----------------------------------------------------------------------------*/ ostr1 << "ostr1 " << 2012 << endl; // 格式化,此处endl也将格式化进ostr1中 cout << ostr1.str(); /*---------------------------------------------------------------------------- *** 建议:在用put()方法时,先查看当前put pointer的值,防止误写 ----------------------------------------------------------------------------*/ long curPos = ostr2.tellp(); //返回当前插入的索引位置(即put pointer的值),从0开始 cout << "curPos = " << curPos << endl; ostr2.seekp(2); // 手动设置put pointer的值 ostr2.put('g'); // 在put pointer的位置上写入'g',并将put pointer指向下一个字符位置 cout << ostr2.str() << endl; /*---------------------------------------------------------------------------- *** 重复使用同一个ostringstream对象时,建议: *** 1:调用clear()清除当前错误控制状态,其原型为 void clear (iostate state=goodbit); *** 2:调用str("")将缓冲区清零,清除脏数据 ----------------------------------------------------------------------------*/ ostr2.clear(); ostr2.str(""); cout << ostr2.str() << endl; ostr2.str("_def"); cout << ostr2.str() << endl; ostr2 << "gggghh"; // 覆盖原有的数据,并自动增加缓冲区 cout << ostr2.str() << endl; ostr2.str(""); // 若不加这句则运行时错误,因为_df所用空间小于gggghh,导致读取脏数据 ostr2.str("_df"); cout << ostr2.str() << endl; // 输出随机内存值,危险 const char* buf = ostr2.str().c_str(); cout << buf << endl; // 正确输出_df string ss = ostr2.str(); const char *buffer = ss.c_str(); cout << buffer << endl; }
运行结果
发表评论
-
FreeRTOS
2022-03-05 16:31 248Ref https://blog.csdn.net/weix ... -
串口通讯相关
2018-11-02 13:44 411https://bbs.csdn.net/wap/topics ... -
[转]C++验证IP是否可以PING通
2018-10-30 17:54 1325https://www.cnblogs.com/guoyz13 ... -
C++/MFC 換皮膚
2018-10-20 11:05 477https://blog.csdn.net/u01123991 ... -
WinCE 截屏 - C++ 代碼
2018-08-31 09:45 574// this function create a bmp ... -
Android NDK搭建環境
2017-11-27 13:25 580https://www.cnblogs.com/ut2016- ... -
8583协议相关
2017-10-17 13:38 5738583相关资料,整理中... -
Java高级应用之JNI
2017-06-19 09:00 600参考link http://www.cnblogs.com/l ... -
C++实现ping功能
2017-04-18 11:21 2155基础知识 ping的过程是向目的IP发送一个type=8的I ... -
OpenSSL 编译环境搭建
2017-03-27 15:01 9061 安裝VS2008到 c:\Program Files (x ... -
最优非对称加密填充(OAEP)
2017-03-25 14:53 1582OpenSSL命令---rsautl http://blog. ... -
[Platform Builder] 设置SVM OS build Env
2016-11-10 11:39 01 copy one OSDesign Project to ... -
[Windows] System Error Codes(GetLastError )0-----5999
2016-10-26 13:28 1881ERROR_SUCCESS 0 (0x0) T ... -
开源Windows驱动程序框架
2016-09-17 21:35 871转自 http://code.csdn.net/news/28 ... -
c/c++代码中执行cmd命令
2016-09-14 14:50 1908转自 http://blog.csdn.net/slixinx ... -
C#使用C++标准DLL实例(包含callback)
2016-09-11 19:44 1086C++编写标准Win32DLL如下 头文件 /***** ... -
C#调用C++的DLL搜集整理的所有数据类型转换方式
2016-09-09 16:07 969转自 http://www.cnblogs.com/zeroo ... -
WinCE CPU使用率计算 测试工具
2016-09-08 16:14 991转自 http://blog.csdn.net/jan ... -
switch在C++与C#中的一些差异
2016-09-08 15:19 810参考链接 http://blog.csdn.net/weiwe ... -
C++ 鼠标模拟程序
2016-09-04 12:09 1612转自 http://blog.csdn.net/weixinh ...
相关推荐
`std::string` 可以通过 C++ 的流机制进行输入和输出。 **1.7.1 C++ 流简介** C++ 流是一系列标准的输入/输出操作的封装,可以用于读写文本数据。 **1.7.2 `std::string` 与 `iostream`、`fstream`** `std::...
4. **串流之简单使用.cpp**:C++的I/O流库(iostream)允许我们使用`std::cout`输出和`std::cin`输入。`和`>>`操作符用于流的连接,`std::endl`用于换行。 5. **结构体中的运算符重载.cpp**:C++允许我们为自定义...
在C++编程中,`sprintf`函数是一个非常实用的格式化输出函数,它与`printf`类似,但将输出写入到指定的字符数组而非标准输出流。然而,由于其变参数特性和对缓冲区大小的依赖,`sprintf`也常常成为错误的源头。以下...
在C++编程语言中,字符串处理是至关重要的一个部分,特别是在面试中,考察候选人的字符串操作能力往往能反映出他们的编程技巧和经验。本篇将详细探讨C++面试中常见的字符串相关知识点,帮助你更好地准备面试。 一、...
### C++ `string` 类深入详解 #### 一、C++ 的 `string` 使用 ##### 1.1 C++ `string` 简介 在 C++ 中,`string` 类是一个非常重要的类,它提供了丰富的接口来处理字符串。与 C 语言中的字符数组不同,`string` ...
C++中的`sprintf()`函数是一个非常实用的字符串格式化工具,它允许开发者将各种数据类型转换为字符串,其功能类似于`printf()`函数,但输出结果存储在字符数组(字符串)中而不是直接输出到标准输出。在本文中,我们...
在C++中,字符串通常表示为`std::string`类型,而数字可以是整型(如`int`, `long long`等)、浮点型(如`float`, `double`)或其他数值类型。进行转换时,我们需要使用特定的函数或方法。 **字符串转数字** 1. **...
`sprintf`函数是C语言中的格式化输出函数,也可以在C++中使用。我们可以利用它来生成十六进制字符串: ```cpp #include std::string to_hex(char data) { char hexBuffer[3] = {0}; sprintf(hexBuffer, "%02X...
`sprintf`函数可以将格式化输出写入到字符串中。该函数的原型为`int sprintf(char *str, const char *format, ...);`。 ```cpp #include #include void writeIntoStr(std::string& str, int num) { sprintf...
C++流是一种输入输出机制,`std::string`可以直接与流对象交互。 **1.7.2 string与iostream、fstream** `std::string`可以与`std::istream`和`std::ostream`以及文件流`std::fstream`交互。 **1.8 格式化字符串**...
C++ 的花括号字符串格式,如 Python 和 C#。 尚不处理浮点格式说明符或隐式参数索引,但可以正确处理转义大括号"{{" 。 // char buf[32]; // sprintf(buf, "(%d, %f, %f)", vec.x, vec.y, vec.z); // spot the ...
在C++编程中,处理文件是一项常见的任务,包括读取文件内容、获取文件大小以及对文件操作进行计时。在给定的标题和描述中,我们聚焦于几个关键点:按序列号读取文件、计算文件大小、计时以及安全地使用`fopen_s`函数...
在C++编程语言中,将整数转换为二进制并输出是一个常见的需求,特别是在处理位操作、数据存储或算法实现时。本文将总结几种不同的方法来实现这一目标。 首先,我们可以使用递归的方式来输出整数的二进制表示。如`...
在C++编程中,数字与字符串之间的转换是常见的操作,特别是在处理用户输入、显示输出或者进行数据存储时。本文将详细讲解C++中数字与字符串转换的方法。 首先,我们来看字符串转换为数字的过程: 1. **`char *` ...
- `string`到`char*`:C++中的`std::string`对象可以通过`c_str()`方法转换为`const char*`指针,如`char * p = str.c_str();` - `char*`到`string`:可以直接用`char*`初始化`std::string`对象,如`string str(p)...
以下是一个关于如何在C++Builder 10.3及更高版本中实现此功能的知识点详解: 1. **Windows API调用**: 在Windows操作系统中,可以使用Windows API函数来获取MAC地址。主要涉及到`iphlpapi.lib`库中的函数,如`...
在实际应用中,sprintf 函数经常用于输出格式化的数据,例如,输出一个浮点数,可以使用 sprintf("%f", 3.14);输出一个字符串,可以使用 sprintf("%s", "hello");等等。 sprintf 函数的使用需要注意一些常见的...
### C/C++头文件概述与知识点详解 #### 1. `<assert.h>` — 断言与调试工具 - **用途**:提供断言宏`assert`用于程序开发过程中的调试,帮助开发者验证程序运行时的状态是否符合预期。 - **示例**: ```c++ #...