请各位大侠帮忙看看下面这段程序哪地方有问题??
#define OK 0
#define ERR 1
#define ERROR (-1)
#define BUFFER_SIZE 256
int GetMemory(char **ppszBuf,int num)
{
if(NULL == ppszBuf)
{
ASSERT(0);
return ERROR;
}
*ppszBuf = (char*)malloc(num);
if(NULL == *ppszBuf)
{
return ERROR;
}
return OK;
}
void test(void)
{
char *pcStr =NULL;
if(OK ==GetMemory(&pcStr,BUFFER_SIZE))
{
scanf("%s",pcStr);
printf(pcStr);
free(pcStr);
}
return;
}
----------------解决方案--------------------------------------------------------
#include <stdio.h>
#include <string.h>
#include <alloc.h>
#define OK 0
#define ERR 1
#define ERROR (-1)
#define BUFFER_SIZE 256
#define NULL 0
int GetMemory(char**ppszBuf,int num)
{
*ppszBuf=(char*)malloc(num*sizeof(char));
if(NULL==*ppszBuf)
{
return ERROR ;
}
return OK ;
}
void test(char**pcStr)
{
if(OK==GetMemory(pcStr,BUFFER_SIZE))
{
scanf("%s",*pcStr);
printf("%s",*pcStr);
free(*pcStr);
}
return ;
}
int main()
{
char*pcStr=NULL ;
test(&pcStr);
}
----------------解决方案--------------------------------------------------------
这道题是某公司的面试题,题目的要求是指出程序中不能出现预期结果的错误,若只是因为缺少main()函数的话,那这道题出得也太没水准了吧!?
----------------解决方案--------------------------------------------------------
我也没看出。
----------------解决方案--------------------------------------------------------
除非scanf("%s",pcStr);有越界行为
----------------解决方案--------------------------------------------------------
Sorry,忘掉了一句,程序假定BUFFER_SIZE足够大,不会导致越界
----------------解决方案--------------------------------------------------------
看不出,能改良的地方只有
if(OK ==GetMemory(&pcStr,BUFFER_SIZE))
{
scanf("%s",pcStr);
printf(pcStr);
free(pcStr);
pcStr=NULL;
}
----------------解决方案--------------------------------------------------------
多谢knocker兄!
----------------解决方案--------------------------------------------------------
噢?这个问题只会出现大的工程中,就这么几句给的提示也太少了一点了吧_^_
----------------解决方案--------------------------------------------------------
差距
----------------解决方案--------------------------------------------------------