下载此文档

在C程序设计中注意字符串操作的越界问题.doc


文档分类:IT计算机 | 页数:约5页 举报非法文档有奖
1/5
下载提示
  • 1.该资料是网友上传的,本站提供全文预览,预览什么样,下载就什么样。
  • 2.下载该文档所得收入归上传者、原创者。
  • 3.下载的文档,不会出现我们的网址水印。
1/5 下载此文档
文档列表 文档介绍
在C程序设计中注意字符串操作的越界问题
付亮 摘要:在C程序设计中数组或串的越界访问是难以发现且相当危险的,因为它可能改变了其他存储空间的内容。C++语言在编译或运行期间均不报告这一类型的错误,所以关于指针或数组的错误特别难以调在C程序设计中注意字符串操作的越界问题
付亮 摘要:在C程序设计中数组或串的越界访问是难以发现且相当危险的,因为它可能改变了其他存储空间的内容。C++语言在编译或运行期间均不报告这一类型的错误,所以关于指针或数组的错误特别难以调试,初学者一定要注意这种陷阱。
关健词:静态存储结构;动态存储结构;越界访问
中图分类号:TP311 文献标识码:A 文章编号:1009-3044(2013)18-4223-02
字符串的存储结构有两种:一种是顺序存储结构,又称静态存储结;另一种是链式存储结构,又称动态存储结构。静态存储结构有两个缺点:一是需预先定义一个串允许的最大字符个数,当该个值估计过大时,浪费空间较大;二是限定了串的最大字符个数,使串的某些操作如复制、连接等受到很大限制与影响。数组或串的越界访问是难以发现且相当危险的,因为它可能改变了其他存储空间的内容。C++语言在编译或运行期间均不报告这一类型的错误,所以关于指针或数组的错误特别难以调试,初学者一定要注意这种陷阱。
1 关于字符串变量操作中的越界问题
字符串变量是一个基类型为字符类型的数组变量,其定义的一般形式为:
char 数组名[元素个数];
在声明字符串变量时,可用字符常量进行初始化,如:
char name[30]=”Zhongshan University”;
这时编译程序会为字符串为题name分配30个字节的存储空间,并将”Zhongshan University”中20个字符的ASCII码存储在前20个字节中,然后在第21个字节中存放一个’\0’表示串结束,至于第22个至30个字节是什么内容是不关心的。字符串变量占用的存储空间大小与其中存放的字符串的长度之间没有相等关系,尽管name中存放的字符串长度为20,实际使用了21个字节,但它仍然占用着30个字节存储空间。
鉴于上述存储空间组织形式,在初始化字符串变量时一定要注意字符串长度不要超过其存储空间的大小,如:
char name[20]=”Zhongshan University”;
可能会引起严重问题,因为字符串的结束标志’\0’超出了为它分配的存储空间边界,可能破坏其他数据。但C++语言在编译或运行期间均不报告这一类型的错误,所以关于指针或数组的错误特别难以调试。
为了避免上述字符串越界错误,解决办法是:不必声明字符数组的长度,而由编译程序根据初始化的字符串常量的长度自动决定。如:
char name[]=”Zhongshan University”;
对于这个声明,编译程序会根据字符串常量的长度为name分配21个字节,相当于
char name[21]=”Zhongshan University”;
2 关于字符串库函数操作的越界问题
与其他类型的数组一样,只可在声明字符串变量时用赋值运算作初始化,在其他地方不允许直接使用赋值运算,如:

在C程序设计中注意字符串操作的越界问题 来自淘豆网www.taodocs.com转载请标明出处.

非法内容举报中心
文档信息
  • 页数5
  • 收藏数0 收藏
  • 顶次数0
  • 上传人巧姐
  • 文件大小14 KB
  • 时间2022-06-25