C++中关于下标越界问题

[复制链接]
查看11 | 回复1 | 2007-11-2 12:38:40 | 显示全部楼层 |阅读模式
非法访问,但是系统没有检查出来。这样做的结果是会改动其它内存(不是系统分配的内存)的内容。甚至于改变代码的内容。缓冲出溢出漏洞就是因为写有这样的代码的。运行如下代码,你看运行结果就知道了!你会发现显然你没有对e进行赋值,但是e里面内容已经是s内容的后半部分了。#include #include using namespace std; void strNCpy(char *strDest, char const *strSrc) { assert((strDest != NULL) && (strSrc != NULL)); while((*strDest++ = *strSrc++) != '\0'); } int main() { char *s = "asdgdsafhfdtjrtkjtyktyk"; char t[3]; char e[100];strNCpy(t, s); cout << t << endl; cout << e << endl; return 0; }
回复

使用道具 举报

千问 | 2007-11-2 12:38:40 | 显示全部楼层
不是的。因为他们的存储空间你根据你的数据类型分配的,而不是你所看到的那样,他们之间可以赋值,如果系统空间不够的话,会实行强制赋值。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则