散分

wang_qiao_ying 2010-05-15 12:15:18
3、请仔细阅读下面程序,找出其中的错误 (6分)
#define MAX_LEN 300
/*函数ConvertCode 想把pByte的所有内容复制到一个内存里面,并通过函数返回值返回*/
unsigned char *ConvertCode(unsigned char *pByte, unsigned char num)
{
unsigned long i = 0;
unsigned char strTemp[MAX_LEN];

if (NULL == pByte)
{
return NULL;
}
memcpy(strTemp, pByte, num);
return (unsigned char *)strTemp;
}

void main(void)
{
unsigned char str[MAX_LEN];
unsigned char *p;
str[0] = 0x12;
str[1] = 0x34;
p = ConvertCode(str, sizeof(str));/*复制所有的str内容到p里面*/
printf("%s", p);
return;

}

答案:
<1> 调用函数ConvertCode返回值没有判断是否为空
<2> 没有判断pByte指向空间大小和MAX_LEN的大小,可能造成越界
<3> 返回局部变量地址
<4> Convertcode的第2个参数定义是unsigned char,而sizeof(str)=300,会溢出
<5> 变量P所指向的内容不是一个字符串,用printf(“%s”,p);输出会错误
<6> 函数中变量i定义没有使用。
...全文
59 1 打赏 收藏 转发到动态 举报
写回复
用AI写文章
1 条回复
切换为时间正序
请发表友善的回复…
发表回复
悟迟 2010-05-15
  • 打赏
  • 举报
回复
王跃文评兽兽:不要脸的时代 臭的自然会成香

742

社区成员

发帖
与我相关
我的任务
社区描述
VB 版八卦、闲侃,联络感情地盘,禁广告帖、作业帖
社区管理员
  • 非技术类社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧