1 / 5
文档名称:

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

格式:doc   大小:14KB   页数:5页
下载后只包含 1 个 DOC 格式的文档,没有任何的图纸或源代码,查看文件列表

如果您已付费下载过本站文档,您可以点这里二次下载

分享

预览

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

上传人:巧姐 2022/6/25 文件大小:14 KB

下载得到文件列表

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

文档介绍

文档介绍:在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 关于字符串库函数操作的越界问题
与其他类型的数组一样,只可在声明字符串变量时用赋值运算作初始化,在其他地方不允许直接使用赋值运算,如: