本版名称: 【编程基础】

版       主: 辛昕

EEWORLD欢迎您,请先注册登录

[问题讨论] C语言降龙十八掌——第五掌 布尔类型是什么类型?

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 编辑 ]

推荐博客

TOP↑

引用:
原帖由 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/

TOP↑

回复 沙发 lixiaohai8211 的帖子

有一点接近答案了,那么,潜在的问题是什么呢?

TOP↑

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

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

TOP↑

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

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

TOP↑


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

只懂这些了,搬好小板凳,围观中......
基本知识用脑记住,具体细节用心琢磨

TOP↑

回复 4楼 lixiaohai8211 的帖子

这个倒不会有问题。void *类型指针直接赋值给char *是成立的。

TOP↑

回复 6楼 辛昕 的帖子

是的,逻辑上是这样的。
问题出在编译器之间的差异。

TOP↑

回复 楼主 richiefang 的帖子

说了这么多,有没有哪位同学去查一下Ansi C中,对于布尔变量的描述?
TRUE和FALSE的值各是什么?

TOP↑

回复 9楼 richiefang 的帖子

呵呵,惭愧了,,,
没去查呢
不过我以前也试过遇到关于 bool的问题,因为我用的是VC编译器,所以我从来没用过布尔数据类型。
基本知识用脑记住,具体细节用心琢磨

TOP↑

24小时排行榜

最近访问的版块