未定义长度的字符数组的长度是多少,跪求

[复制链接]
查看11 | 回复2 | 2012-9-10 01:47:35 | 显示全部楼层 |阅读模式
char s1[]="string"; 长度为7=6+1,也就是“string”的6个字符加上结尾的'\0'。strcpy生效是因为你的编译器检查选项不严格,很多静态检查工具都能查出你的数组越界拷贝操作。实际情况是"string123"的长度是10=6+3+1。超出范围的3个字节的拷贝会覆盖s1后面的连续内存空间。这块连续的内存空间较多调用栈空间,他是用来存放每次调用的参数和局部变量的。当其他的函数使用到你覆盖的大于3个字节内容时,会发生不可预知的情况。而3个字节不会发生问题只能代表其他的函数读取被覆盖的内容进行的操作没有导致系统出错而已。但这个内存越界覆盖操作绝对是隐藏在程序中的不定时炸弹。当你的程序或者这个函数越来越复杂...
回复

使用道具 举报

千问 | 2012-9-10 01:47:35 | 显示全部楼层
使用函数strlen求实际长度:strlen(s1),数组为该数加1“s1可以容下超过string长度的字符串,但是不能输入超过3个”这是碰巧,要保证程序的稳定性需要将s1定义得足够大...
回复

使用道具 举报

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

本版积分规则

主题

0

回帖

4882万

积分

论坛元老

Rank: 8Rank: 8

积分
48824836
热门排行