一道c语言小程序,分析题,高分求助!!

[复制链接]
查看11 | 回复2 | 2013-1-11 08:59:01 | 显示全部楼层 |阅读模式
这段代码 把你提供的字符串拷贝到另外一个缓冲区中并输出,字符串长度不能超过7,如果超过,不同的编译器可能会有不同的处理,而代码不应该假定使用某个编译器,那样换个环境用起来就有问题。 1.结果看出你的系统分配的内存并不是连续分配给程序的2.结果可能导致程序崩溃,因为数组访问越界了,不同的编译器给出的异常信息可能不同。3.解决的办法是使用strncpy函数,这样数组就不会溢出。同时注意到strncpy函数不会再缓冲区最后添加'\0',这需要你代码中体现。另外,该函数中限定的字节数最好不要超过7(本例中),否则你就没有给数组追加'\0'的机会了,输出时不但会使出你提供的字符串,还会跟着乱码,因为缓冲区字符串没有以null终止。直到遇到'\...
回复

使用道具 举报

千问 | 2013-1-11 08:59:01 | 显示全部楼层
这是个在DOS窗口运行的代码。 printf("ch1 : %p - i : %p \n", ch1,&i); -----以16进制数 显示数组ch1的首地址和局部变量i的存放地址。ch1的申请长度是8,而待存字符串totototo的长度也是8,出现了存储器覆盖问题。看不出来代码有什么问题,“%p - i”中的 - i用意不明。...
回复

使用道具 举报

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

本版积分规则

主题

0

回帖

4882万

积分

论坛元老

Rank: 8Rank: 8

积分
48824836
热门排行