stl::string与二进制数据
来源:互联网 发布:通州and淘宝城怎么样 编辑:程序博客网 时间:2024/06/05 03:44
C99 有很多和 string 相关的函数,如 strcat , strchr , strcmp , strcpy , strlen , strncat , strncmp , strncpy 等。然而使用 C++ 编程时,所有和 string 相关的操作均可以使用 string 类的相关接口完成, string 提供和原来 C 接口类似的功能和性能,同时提供更高的安全性。
String 类有一个特性: a string of length n must manage a block of memory whose size is at least n + 1 。即长度为 n 的 string 对象,其内存空间至少为 n+1 个字符,且最后一个字符为 ’\0’ 。
不过在进行 string 操作时,有一点必须牢记: C/C++ 语言的 string 是以 ’\0’ 结尾的,对不以 ’\0’ 结尾的 string 进行操作容易引发错误,甚至导致内存溢出等 crash 。
C++ 的 string 类,除了用于处理常规 string 操作 外,其本身也可用于存储各种数据 ,如文件数据。使用者采用 string( const char* str, size_type length ); 来封装特定长度的 char* 数据块。 String 类的各种运算符将保证数据传递的完整性,即 string 对象。
示例:
using namespace std;int main() { std::string str("test string"); cout<<str<<" "<<str.c_str()<<endl; cout<<str.size()<<endl; char* buf = new char[str.size()+1]; memset(buf, 0, sizeof(buf)); string test(buf, str.size()); // 封装非字符数据 cout<<test<<" "<<test.c_str()<<endl; cout<<test.size()<<endl; memcpy(buf, str.c_str(), str.size()); test = string(buf, str.size()); // 封装字符数据,并自动加上 ’\0’ 结束符 cout<<test<<" "<<test.c_str()<<endl; cout<<test.size()<<endl; return 0;}
其输出:
test string test string
11
11
test string test string
11
说明:这个例子说明:当使用 string( const char* str, size_type length ); 来构造string对象时,string对象的长度由外部指定,数据则来自 str ,如果 length 大于 str 地址范围,可能引发 crash!
这个例子也说明了 string 可用于封装数据,即使是 ’\0’ 的数据。因此,string类可以用于存储各种数据,字符串、非字符串 (图片,视频)等数据。
注意:将数据拷贝到内存时,不要使用strcpy, 应该使用memcpy,因为strcpy、strncpy碰到 ’\0’ 将认为拷贝结束。 总之,不要使用和str*** 相关的函数去操作内存数据,除非数据只能是string(memcpy完全可拷贝任何数据) 。
- stl::string与二进制数据
- stl::string与二进制数据
- string来存放二进制数据
- STL----vector与string
- 文本数据与二进制数据
- STL概念与字符串string
- android中16进制String类型的而数据与二进制byte类型的数据相互转换,c++中16进制String类型的而数据与二进制byte类型的数据相互转换
- STL string与CString的Unicode字符集
- STL string与CString的Unicode字符集
- effective stl笔记之vector与string
- STL中string与wstring的转换
- C++实现string存取二进制数据的方法
- 二进制string转为string
- 大数据string八进制转为string十六进制(通过string的二进制)
- 二进制数据与原码、反码、补码
- 二进制数据与字符串之间的转换
- 文件与二进制数据互转-ByteArrayOutputStream
- 二进制数据与原码、反码、补码
- 利用KVO实现 UITextView 通过代码方式设置内容后,自动滚动到最后一行
- 隐藏apache和php的版本信息配置方法
- 中国移动MAS机的特点
- 剑指offer 37:求两个链表的第一个公共节点
- Hql的用法
- stl::string与二进制数据
- Tomcat的类加载体系及Tomcat源码
- Android工程笔记:三种实现监听事件的方法
- idoerp
- android 签名打包和出现的问题transformClassesAndResourcesWithProguardForRelease
- 如何汉化 po 文件及编译成 mo 文件
- KVC(key value coding)/ KVO(key value observing)
- C/C++异常处理
- Fatal error: Call to undefined function mb_substr()