C语言中,string类型内部结构是怎样的,能否详细解析一下?
- 内容介绍
- 文章标签
- 相关推荐
本文共计984个文字,预计阅读时间需要4分钟。
在C语言中,有两种方式表示字符串:一种是用字符数组来容纳字符串,例如`char str[10]=abc;`这样的字符串是可读写的;另一种是使用字符串常量,例如`char *str=abc;`这样的字符串只能读。
在C语言中,有两种方式表示字符串:
- 一种是用字符数组来容纳字符串,例如char str[10] = "abc",这样的字符串是可读写的;
- 一种是使用字符串常量,例如char *str = "abc",这样的字符串只能读,不能写。
两种形式总是以\0作为结束标志。
C++ string 与它们在C语言中的前身截然不同。首先,也是最重要的不同点,C++ string 隐藏了它所包含的字符序列的物理表示。程序设计人员不必关心数组的维数或\0方面的问题。
string 在内部封装了与内存和容量有关的信息。具体地说,C++ string 对象知道自己在内存中的开始位置、包含的字符序列以及字符序列长度;当内存空间不足时,string 还会自动调整,让内存空间增长到足以容纳下所有字符序列的大小。
C++ string 的这种做法,极大地减少了C语言编程中三种最常见且最具破坏性的错误:
- 数组越界;
- 通过未被初始化或者被赋以错误值的指针来访问数组元紊;
- 释放了数组所占内存,但是仍然保留了“悬空”指针。
C++ 标准没有定义 string 类的内存布局,各个编译器厂商可以提供不同的实现,但必须保证 string 的行为一致。采用这种做法是为了获得足够的灵活性。
本文共计984个文字,预计阅读时间需要4分钟。
在C语言中,有两种方式表示字符串:一种是用字符数组来容纳字符串,例如`char str[10]=abc;`这样的字符串是可读写的;另一种是使用字符串常量,例如`char *str=abc;`这样的字符串只能读。
在C语言中,有两种方式表示字符串:
- 一种是用字符数组来容纳字符串,例如char str[10] = "abc",这样的字符串是可读写的;
- 一种是使用字符串常量,例如char *str = "abc",这样的字符串只能读,不能写。
两种形式总是以\0作为结束标志。
C++ string 与它们在C语言中的前身截然不同。首先,也是最重要的不同点,C++ string 隐藏了它所包含的字符序列的物理表示。程序设计人员不必关心数组的维数或\0方面的问题。
string 在内部封装了与内存和容量有关的信息。具体地说,C++ string 对象知道自己在内存中的开始位置、包含的字符序列以及字符序列长度;当内存空间不足时,string 还会自动调整,让内存空间增长到足以容纳下所有字符序列的大小。
C++ string 的这种做法,极大地减少了C语言编程中三种最常见且最具破坏性的错误:
- 数组越界;
- 通过未被初始化或者被赋以错误值的指针来访问数组元紊;
- 释放了数组所占内存,但是仍然保留了“悬空”指针。
C++ 标准没有定义 string 类的内存布局,各个编译器厂商可以提供不同的实现,但必须保证 string 的行为一致。采用这种做法是为了获得足够的灵活性。

