散分
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定义没有使用。