有关c语言中malloc函数的问题

范例1char*str;str=(char*)malloc(100);if(str==NULL){printf("Notenoughmemorytoallocatbuff... 范例1
char *str ;
str =(char *)malloc (100);
if (str == NULL )
{
printf("Not enough memory to allocat buffer\n ");
exit (1);
}

范例2

char *ptr ;
ptr = malloc (35*sizeof (char ));
if (ptr == NULL )
{
puts ("Memory allocation error .");
return 1;
}

这是教科书上的两个范例,差不多啊!为什么一个malloc函数之前有强制转换,一个却没有 ?
展开
 我来答
kmsilvan
2011-06-05 · TA获得超过1671个赞
知道小有建树答主
回答量:466
采纳率:60%
帮助的人:134万
展开全部
malloc函数返回指向被分配内存的指针。范例1把返回的这个指针的值又赋给了一个字符串指针,尽管值不变,但类型不同,中间可以用强制转换;范例2则直接赋值,原因是这两个类型的宽度相同,不用强制转换也不会出错。
作为编号习惯,范例1更清晰一些,不会因为不小心出错。但范例2运行起来也没问题。
更多追问追答
追问
虽然我不知道什么是宽度,但我还是觉的你说的在理。http://blog.csdn.net/waterwalk/archive/2008/05/28/2490293.aspx
这是我在csdn论坛上找到的一个贴子,你看他说的在理吗?
追答
你找到的贴子说的也有道理,但更多的是从编译器的角度来考虑。而我和一些经常用c的同事都觉得写强制转换更清晰一些:一来自己写强制转换的时候,必须要考虑清楚等号两边的指针类型;再就是别人看的时候省力,知道这儿有一个不同类型间的转换。
我说的“两个类型的宽度相同”,意思是void类型指针和char类型指针实际占用的内存大小都相同,所以只要编译器不警告,运行起来不会有错。
shine1991
科技发烧友

2011-06-05 · 智能家居/数码/手机/智能家电产品都懂点
知道顶级答主
回答量:4.7万
采纳率:82%
帮助的人:2.3亿
展开全部
lz没发现,两个指针 都是指向char型变量么?
如果是char型的话呢,问题不大,因为malloc返回的默认就是指向char型的,但是 如果是其他类型的指针变量就不一样了,需要强制转换,所以为了统一,还是加上强制转换的好
追问
malloc不是默认返回void类型指针么吗?
追答
这个,本来是没错了啦

关于该函数的原型,在旧的版本中malloc返回的是char型指针,新的ANSIC标准规定,该函数返回为void型指针,因此必要时要进行类型转换。

引用自百度百科
http://baike.baidu.com/view/736228.htm
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
五丹丹0ir
2011-06-05 · TA获得超过126个赞
知道答主
回答量:232
采纳率:0%
帮助的人:110万
展开全部
应该是:
ptr = (char*)malloc (35*sizeof (char )); 这样格式才识标准的
追问
http://blog.csdn.net/waterwalk/archive/2008/05/28/2490293.aspx
这是csdn论坛中的一个帖子,你看他说的在理吗?
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(1)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式