程序错哪了 C

ArmStronger 2008-11-20 02:39:54
#include<stdio.h>
#include<stdlib.h>
#include<string.h>

char *GetMemerry(char *p)
{
p=(char *)malloc(100);
return p;
}

void main()
{
char *str=NULL;
GetMemerry(str);

strcpy(str,"hello world");
printf(str);
}
...全文
135 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
Tcs_win 2008-11-21
  • 打赏
  • 举报
回复
#include <string.h> 

char *GetMemerry(char *p)
{
p=(char *)malloc(100);
return p;
}

void main()
{
char *str=NULL;
str=GetMemerry(str);

strcpy(str,"hello world");
printf(str);
}
lsd1025 2008-11-21
  • 打赏
  • 举报
回复
同意三楼!
clarence_songyifei 2008-11-21
  • 打赏
  • 举报
回复
貌似这道题是面试题吧:)

上面讲的好多是个关键。

其实考的地方不止一个: 比如内存释放没有做,内存没有初始化等
han198561315207 2008-11-20
  • 打赏
  • 举报
回复
好像不对,在VS2005里不是这样
#include <string.h>

char *GetMemerry(char *p)
{
p=(char *)malloc(100);
return p;
}

void main()
{
char *str=NULL;
GetMemerry(str); //没和定义对应

strcpy(str,"hello world");
printf(str);
}
ArmStronger 2008-11-20
  • 打赏
  • 举报
回复
非常感谢楼上的各位,我终于明白了
sxlengwa 2008-11-20
  • 打赏
  • 举报
回复

GetMemerry(str);
// 注意:调用该函数并不改变 str 的值,仅仅是把它的值传给了函数
// 也就是说 你的动作相当于:
str = NULL;
char *p=str;
p=(char *)malloc(100);
此时 str 还是 NULL
yyy6210 2008-11-20
  • 打赏
  • 举报
回复
看看林锐吧~~~
lbh2001 2008-11-20
  • 打赏
  • 举报
回复
搞清楚传址实际上也是按传值操作的

方案1

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

char *GetMemerry(char *p)
{
p=(char *)malloc(100);
return p;
}

void main()
{
char *str=NULL;

str = GetMemerry(str);

strcpy(str,"hello world");
printf(str);
}

方案2

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

char *GetMemerry(char **p)
{
*p=(char *)malloc(100);
return *p;
}

void main()
{
char *str=NULL;

GetMemerry(&str);

strcpy(str,"hello world");
printf(str);
}

69,382

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧