编程问题求助,求一下程序的输出结果,并分析。

珞石 2018-12-28 06:52:50
/**
程序1
*/
#include<stdio.h>
#include<stdlib.h> //malloc等需要使用
#include<string.h> //strcpy等需要使用

void GetMemory3(char **p3,int num);
void Test3(void);

void GetMemory3(char **p3,int num){
*p3=(char*)malloc(num);
}

void Test3(){
char *str3=NULL;
GetMemory3(&str3,100);
strcpy(str3,"hello");
printf("%s\n",str3);
printf("\n");
}

int main(){
Test3();
return 0;
}





/**程序2*/

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

void Test4(void);

int main(){
Test4();
return 0;
}

void Test4(){
char *str4=NULL;
str4=(char*)malloc(100);
strcpy(str4,"world");
printf("%s\n",str4);
printf("\n");
}
...全文
113 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
珞石 2018-12-29
  • 打赏
  • 举报
回复
[quote=引用 2 楼 northwesternwind 的回复:]
[quote=引用 1 楼 northwesternwind 的回复:]

程序1问题:
*p3=(char*)malloc(num)改为*p3=malloc(num)是否可行?
修改程序后编译通过并且正常显示hello,且malloc函数本身返回的就是地址,加不加(char*)都一样?

程序2问题:
free(str4);//不太懂这句,释放内存后里面的内容不会清除么???

赵4老师 2018-12-29
  • 打赏
  • 举报
回复
代码功能归根结底不是别人帮自己看或讲解或注释出来的;而是被自己静下心来花足够长的时间和精力亲自动手单步或设断点或对执行到某步获得的中间结果显示或写到日志文件中一步一步分析出来的。
提醒:再牛×的老师也无法代替学生自己领悟和上厕所!
单步调试和设断点调试(VS IDE中编译连接通过以后,按F10或F11键单步执行,按Shift+F11退出当前函数;在某行按F9设断点后按F5执行停在该断点处。)是程序员必须掌握的技能之一。
自信男孩 2018-12-29
  • 打赏
  • 举报
回复
两个程序都能正常输出结果“hello", "world".

因为str3, str4虽然初始化为NULL,但是都通过malloc申请了空间,并把新的空间存放到了str3, str4中(而已理解新的地址值覆盖了NULL)。

两个程序都有一个共同的问题,就是释放内存,malloc需要手动释放,因此需要在用完之后free掉。
northwesternwind 2018-12-29
  • 打赏
  • 举报
回复
引用 1 楼 northwesternwind 的回复:
程序1:GetMemory3函数能够申请内存并通过第一个参数p3返回分配的内存地址。
在Test3中,首先调用GetMemory3, 为str3指针分配100字节的内存,然后利用strcpy
向该块内存赋值字符串, strcpy会同时复制字符串结束符,所以复制结束后,str3就是
一个字符串,内容为"hello"

hello


程序2:分析请你仿照程序1的分析自己写

world



估计写出结果不难,难的是分析结果?

抱歉是“复制字符串”,不是“赋值字符串”。 拼音输入的。
northwesternwind 2018-12-29
  • 打赏
  • 举报
回复
程序1:GetMemory3函数能够申请内存并通过第一个参数p3返回分配的内存地址。
在Test3中,首先调用GetMemory3, 为str3指针分配100字节的内存,然后利用strcpy
向该块内存赋值字符串, strcpy会同时复制字符串结束符,所以复制结束后,str3就是
一个字符串,内容为"hello"

hello


程序2:分析请你仿照程序1的分析自己写

world



估计写出结果不难,难的是分析结果?

69,373

社区成员

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

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