大家看看这个程序那里错了?华为的,很奇怪啊
函数的功能是输出用户输入的字符串
#include "stdio.h"
#include "string.h"
#include "malloc.h"
#define OK 0
#define ERR 1
#define ERROR (-1)
#define BUFFER_SIZE 256
int Getme(char**pps,int num)
{
if(NULL==pps)
{ assert(0);
return ERROR;
}
*pps=(char *)malloc(num);
if(NULL==*pps)
{
return ERROR;
}
memcpy(*pps,"hred%stail",11)
return OK;
}
void main()
{
char *psb=NULL;
if(OK==Getme(&psb,BUFFER_SIZE))
{
printf(psb);
free(psb);
psb=NULL;
}
return;
}
问题点数:10、回复次数:9Top
1 楼treeroot(旗鲁特)回复于 2006-03-16 15:48:57 得分 0
if(NULL==*pps)
{
return ERROR;
}
*pps指针指向的值,
改为
if(NULL==pps)
{
return ERROR;
}
Top
2 楼treeroot(旗鲁特)回复于 2006-03-16 15:49:34 得分 0
下面的也都是这个错误Top
3 楼jinjiajie(leorio)回复于 2006-03-16 15:50:11 得分 0
错误信息弄出来,我这里编译出来都是因为你的程序是从网页上还是什么地方拷来导致的错误Top
4 楼angelanpan()回复于 2006-03-16 15:51:59 得分 0
%好像有问题吧
"hred%%stail"Top
5 楼wgjmail(笑面佛)回复于 2006-03-16 16:05:44 得分 0
malloc分配的数据应该马上初始化为0, 这里并没有, 这只算是个警告, 不能算直接的错误.
由于这样不初始化的为0, 复制的字符串 hred%stail 又没有结束符\0, 所以当Getme()返回成功后,执行 printf(psb)时就会出错.Top
6 楼angelanpan()回复于 2006-03-16 16:07:32 得分 10
就是%的问题
在printf看来pps是"hred%stail" 那么%s会被看作是一个字符串的输出格式,那么printf会读取第二个参数,而第二个参数恰好为NULL,导致读取NULL的指针,段错误.
改为:
int Getme(char**pps,int num)
{
if(NULL==pps)
{ assert(0);
return ERROR;
}
*pps=(char *)malloc(num);
if(NULL==*pps)
{
return ERROR;
}
memcpy(*pps,"hred%%stail",11)
return OK;
}
就不会有错误了
Top
7 楼angelanpan()回复于 2006-03-16 16:10:39 得分 0
memcpy((*pps,"hred%stail",11) 复制了'\0',因为常量字符串都回默认在后面加上'\0',也就是说在内存里面是这样的"hred%stail\0";
哦, 上楼的程序最好改为:memcpy(*pps,"hred%%stail",12)
Top
8 楼hyallentong(Caniggia)回复于 2006-03-16 16:15:24 得分 0
memcpy(**pps,"hred%stail",11)
^^Top
9 楼hyallentong(Caniggia)回复于 2006-03-16 16:20:45 得分 0
晕打了两个*号Top




