首页 新闻 会员 周边 捐助

C语言中关于格式输入与输出(printf,scanf)的一道题目...显示大侠功力的时刻来临了!

0
[已解决问题] 解决于 2012-01-06 22:23

下面程序用于输出用户输入的字符串。请指出其中的问题

#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;

}

WangCT的主页 WangCT | 初学一级 | 园豆:186
提问于:2012-01-06 21:16
< >
分享
最佳答案
1

printf()的参数是可变参数,参数的数量,printf也不知道,只能通过分析第一个参数的字符列表中的%s %d %ld之类的关键字,分析第一个参数后面有几个参数。

很不幸,你给printf传入的第一个参数中"Head%sTail"有一个%s,所以printf函数认为后面还有一个字符串,就去取,就访问了非法内存,异常退出了。

ggjucheng | 菜鸟二级 |园豆:205 | 2012-01-06 22:01
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册