免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 1652 | 回复: 8
打印 上一主题 下一主题

[C] 我这个程序有问题么? [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2008-04-11 14:19 |只看该作者 |倒序浏览
1 #include "stdio.h"
2 #include "stdlib.h"
3 int     main()
4 {
5         struct struct_str{
6                char*   string;
7         }str;
8         str.string=(char*)malloc(sizeof(str));     //注意是sizeof(str)
9         fgets(str.string,2,stdin);
10       printf("%s",str.string);
11       return 0;
12 }

论坛徽章:
0
2 [报告]
发表于 2008-04-11 15:22 |只看该作者

回复 #1 lishizelibin 的帖子

下面加几行getchar();
觉得没有什么问题

论坛徽章:
0
3 [报告]
发表于 2008-04-11 15:26 |只看该作者

回复 #2 chong232 的帖子

1 #include "stdio.h"
2 #include "stdlib.h"
3 int     main()
4 {
5         struct struct_str{
6                 char*   string;
7         }str;
8
9        str.string=(char*)malloc(sizeof(char));
10      fgets(str.string,2,stdin);
11      printf("%s",str.string);
12       return 0;
13 }
14
这有什么区别?

论坛徽章:
0
4 [报告]
发表于 2008-04-11 15:34 |只看该作者
str.string=(char*)malloc(sizeof(char));
fgets(str.string,2,stdin);

难道不会溢出?

论坛徽章:
0
5 [报告]
发表于 2008-04-11 15:39 |只看该作者
malloc之后放一个memset
memset(str.string, 0, sizeof(str));

论坛徽章:
0
6 [报告]
发表于 2008-04-11 15:46 |只看该作者

回复 #5 cugb_cat 的帖子

这两个malloc有什么不同
1楼和3楼
我把这两个程序在gcc -std=c99编译运行都通过
可感觉有什么不理解
请谈谈你对这两个程序的看法

论坛徽章:
0
7 [报告]
发表于 2008-04-11 16:08 |只看该作者
原帖由 lishizelibin 于 2008-4-11 15:46 发表
这两个malloc有什么不同
1楼和3楼
我把这两个程序在gcc -std=c99编译运行都通过
可感觉有什么不理解
请谈谈你对这两个程序的看法

1楼分配的是4个字节,3楼分配的是1一个字节。
其实3楼的程序也不会出问题,因为malloc不会只分配1个字节的,但这么做是错误的。

论坛徽章:
0
8 [报告]
发表于 2008-04-11 16:14 |只看该作者

回复 #7 cugb_cat 的帖子

哦,明白了,谢谢

论坛徽章:
0
9 [报告]
发表于 2008-04-11 16:19 |只看该作者

回复 #7 cugb_cat 的帖子

我以前测试过,这样做也是可能出现错误的。因为分配的内存其他字节,有的是系统用来记录分配内存的信息,管理这块内存的。
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP