下面程序用于输出用户输入的字符串。请指出其中的问题
#define OK 0
#define ERR 1
#define ERROR (-1)
#define BUFFER_SIZE 256
int GetMsg(char **ppszBuf, int num)
{
if( NULL == ppszBuf )
{
ASSERT(0);
return ERROR;
}
*ppszBuf = (char *)malloc(num);
if(NULL == *ppszBuf)
{
return ERROR;
}
memcpy(*ppszBuf,"Head%sTail",11);
return OK;
}
void Test(void)
{
char *pcStr = NULL;
if(OK == GetMsg(&pcStr, BUFFER_SIZE))
{
printf(pcStr);
free(pcStr);
pcStr=NULL;
}
return;
}
printf()的参数是可变参数,参数的数量,printf也不知道,只能通过分析第一个参数的字符列表中的%s %d %ld之类的关键字,分析第一个参数后面有几个参数。
很不幸,你给printf传入的第一个参数中"Head%sTail"有一个%s,所以printf函数认为后面还有一个字符串,就去取,就访问了非法内存,异常退出了。