10941|28

1672

帖子

0

TA的资源

裸片初长成(初级)

楼主
 

C语言降龙十八掌——第五掌 布尔类型是什么类型? [复制链接]

C语言降龙十八掌——第五掌布尔类型是什么类型?

大家看一看,这段代码有什么问题?

......
char*buffer;

/*Allocate memory with function of standard lib */
buffer =malloc (SIZE_OF_BUF);

/* Checkif the memory allocate success, if no, then output error information and return*/
if(!buffer)
{
    printf (“Memory allocate fail\n”);
    return -1;
}
......

这段代码有什么潜在的问题呢?
提醒一下,大家可以参考Ansi C标准中对于布尔变量的定义。


[ 本帖最后由 richiefang 于 2010-2-28 01:38 编辑 ]
此帖出自编程基础论坛

最新回复

不错。。。。。。 学习了  详情 回复 发表于 2010-4-16 21:31
点赞 关注
 

回复
举报

2955

帖子

0

TA的资源

纯净的硅(初级)

沙发
 
原帖由 richiefang 于 2010-2-27 23:00 发表
C语言降龙十八掌——第五掌布尔类型是什么类型?

大家看一看,这段代码有什么问题?

......
char*buffer;

/*Allocate memory with function of standard lib */
buffer =malloc (SIZE_OF_BUF);

/* ...

if(!buffer)这样的写法好像有问题。
此帖出自编程基础论坛
 
个人签名不断地学习,才会有创新!
淘宝小店:手机、qq点卡、游戏点卡自动充值 http://shop63727265.taobao.com/
 
 

回复

1672

帖子

0

TA的资源

裸片初长成(初级)

板凳
 

回复 沙发 lixiaohai8211 的帖子

有一点接近答案了,那么,潜在的问题是什么呢?
此帖出自编程基础论坛
 
 
 

回复

2955

帖子

0

TA的资源

纯净的硅(初级)

4
 
buffer = (char *) malloc (SIZE_OF_BUF); 
malloc 函数返回的是 void * 类型,如果按以上写法,则程序无法通过编译,报错:“不能将 void* 赋值给 char * 类型变量”。所以必须通过 (char *) 来将强制转换。

[ 本帖最后由 lixiaohai8211 于 2010-3-1 10:17 编辑 ]
此帖出自编程基础论坛
 
个人签名不断地学习,才会有创新!
淘宝小店:手机、qq点卡、游戏点卡自动充值 http://shop63727265.taobao.com/
 
 

回复

2955

帖子

0

TA的资源

纯净的硅(初级)

5
 
因为*buffer是指针,那么buffer就相当于这个指针的地址,对一个地址做布尔判读是有问题的。

[ 本帖最后由 lixiaohai8211 于 2010-3-1 10:19 编辑 ]
此帖出自编程基础论坛
 
个人签名不断地学习,才会有创新!
淘宝小店:手机、qq点卡、游戏点卡自动充值 http://shop63727265.taobao.com/
 
 

回复

7815

帖子

56

TA的资源

裸片初长成(中级)

6
 

额,我觉得没问题,因为我就是这么做的。
buffer是个地址没错,但是,(!buffer)是用来检查这个地址是不是NULL,如果是NULL,则相当于 0,否则就是1。
而一个指针分配内存出错的话,就相当于赋值为NULL,所以,这个可以用来是否分配成功。

只懂这些了,搬好小板凳,围观中......
此帖出自编程基础论坛
 
个人签名

强者为尊,弱者,死无葬身之地

 
 

回复

1672

帖子

0

TA的资源

裸片初长成(初级)

7
 

回复 4楼 lixiaohai8211 的帖子

这个倒不会有问题。void *类型指针直接赋值给char *是成立的。
此帖出自编程基础论坛
 
 
 

回复

1672

帖子

0

TA的资源

裸片初长成(初级)

8
 

回复 6楼 辛昕 的帖子

是的,逻辑上是这样的。
问题出在编译器之间的差异。
此帖出自编程基础论坛
 
 
 

回复

1672

帖子

0

TA的资源

裸片初长成(初级)

9
 

回复 楼主 richiefang 的帖子

说了这么多,有没有哪位同学去查一下Ansi C中,对于布尔变量的描述?
TRUE和FALSE的值各是什么?
此帖出自编程基础论坛
 
 
 

回复

7815

帖子

56

TA的资源

裸片初长成(中级)

10
 

回复 9楼 richiefang 的帖子

呵呵,惭愧了,,,
没去查呢
不过我以前也试过遇到关于 bool的问题,因为我用的是VC编译器,所以我从来没用过布尔数据类型。
此帖出自编程基础论坛
 
个人签名

强者为尊,弱者,死无葬身之地

 
 

回复

148

帖子

3

TA的资源

五彩晶圆(初级)

11
 

回复 楼主 richiefang 的帖子

下到一个Ansi C标准,请楼主指明!
此帖出自编程基础论坛
 
 
 

回复

148

帖子

3

TA的资源

五彩晶圆(初级)

12
 
标准!

ISO-C-FDIS[1].1999-04.rar

869.01 KB, 下载次数: 69

此帖出自编程基础论坛
 
 
 

回复

1672

帖子

0

TA的资源

裸片初长成(初级)

13
 

回复 10楼 辛昕 的帖子

实际上,你无法在C代码中声明真正的“布尔类型”的变量。
此帖出自编程基础论坛
 
 
 

回复

7815

帖子

56

TA的资源

裸片初长成(中级)

14
 
哦,中午在CSDN上下了一个ANSI C,看得很晕,翻了几十页仍没找到相关的描述,然后就上课了~~

嗯,旧标准好像没有bool,以前试过上网找头文件,但是发现没用,后来也没深入捣鼓.....


PS:八卦一下,新头像是 兽兽 么?

[ 本帖最后由 辛昕 于 2010-3-1 17:39 编辑 ]
此帖出自编程基础论坛
 
个人签名

强者为尊,弱者,死无葬身之地

 
 

回复

1672

帖子

0

TA的资源

裸片初长成(初级)

15
 

回复 14楼 辛昕 的帖子

当然,我不是跟娜MM打赌来着吗~
此帖出自编程基础论坛
 
 
 

回复

148

帖子

3

TA的资源

五彩晶圆(初级)

16
 
查网上说,VC里是没有stdbool这个头文件的,也就是如果包含此文件,编译不通过。C99的标准是要有这个头文件。这么说,有些编译器很霸道!
此帖出自编程基础论坛
 
 
 

回复

1672

帖子

0

TA的资源

裸片初长成(初级)

17
 

回复 16楼 feman5012 的帖子

呵呵。8051的编译器更霸道,所有局部变量都默认在静态区分配,而不是堆栈。
关键不在这里。
此帖出自编程基础论坛
 
 
 

回复

148

帖子

3

TA的资源

五彩晶圆(初级)

18
 

回复 17楼 richiefang 的帖子

期待你专业的回答=================
此帖出自编程基础论坛
 
 
 

回复

1672

帖子

0

TA的资源

裸片初长成(初级)

19
 

回复 18楼 feman5012 的帖子

会在下一讲的开头公布答案^_^
此帖出自编程基础论坛
 
 
 

回复

148

帖子

3

TA的资源

五彩晶圆(初级)

20
 
我今天又看到一个说法:说在VB在把TRUE定义为"-1",在VC中把TRUE定义为"1"。不知道跟你的问题贴不贴得上!是从附件的27页看到的!

上海贝尔的c语言高级教程.pdf

326.11 KB, 下载次数: 61

此帖出自编程基础论坛
 
 
 

回复
您需要登录后才可以回帖 登录 | 注册

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/9 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表