C语言测试题---答对奖励100芯币

wanghongyang   2011-4-22 16:20 楼主
为了巩固坛友们的C语言知识,我将以后不定期的将我遇到的各种C语言问题或者我见到的比较好的问题以这种竟答的方式展示给大家,依赖是希望大家上论坛能多学点知识,二来是希望我们论坛可以成为一个knowledge base,大家如果觉得我这种方式好也可以参与进来!~

char *p=(char *)malloc(sizeof(char)*10);
p="hello";

大家觉得这个有什么问题,或者说有什么潜在的问题?

跟帖回答,第一个答对者奖励芯币100!~
[ 本帖最后由 wanghongyang 于 2011-4-22 16:40 编辑 ]
QQ:1625345502

回复评论 (66)

回复 楼主 wanghongyang 的帖子

管理员回答,有没有芯币奖励呀!

貌似应该把5改成6
点赞  2011-4-22 16:29
记得不是很清楚了,如果说错了,别嘲笑我哟,还有一位是要用来存储空间
点赞  2011-4-22 16:32

回复 沙发 maylove 的帖子

回答正确了照样有芯币呀 哈哈 !~但是你答的不对!~我改以下题目,要是这样问就太简单了。
QQ:1625345502
点赞  2011-4-22 16:40

回复 4楼 wanghongyang 的帖子

献丑了,再想想....
点赞  2011-4-22 16:43
p="hello"这句不答对吧
点赞  2011-4-22 16:46
不应该等于吧 应该用strcpy吧 对不对
点赞  2011-4-22 16:48

回复 6楼 常见泽1 的帖子

p = "hello";没有问题,这样是正确的!~
QQ:1625345502
点赞  2011-4-22 16:56
char *p=(char *)malloc(sizeof(char)*10);
p="hello";
p是地址啊,你赋字符串干啥??
点赞  2011-4-22 16:59

回复 9楼 fxw451 的帖子

一点就醒,原来是犯了值传递的错误
点赞  2011-4-22 17:03

回复 9楼 fxw451 的帖子

“hello”不是地址吗?
QQ:1625345502
点赞  2011-4-22 17:06

回复 10楼 maylove 的帖子

“hello”也是地址。
QQ:1625345502
点赞  2011-4-22 17:09
今天回家,好好研究这个“简单的”问题去!
点赞  2011-4-22 17:10
malloc分配的空间是在堆上,但p指针本身是在栈上
点赞  2011-4-22 17:12

回复 13楼 maylove 的帖子

恩恩 这个问题很简单,它不难,如果你强烈的要求那样做也没有问题,但是它有很多潜在的问题,程序员在写程序的时候往往就是忽略了一些潜在的问题才导致大量的时间去找BUG,费时费力!~
QQ:1625345502
点赞  2011-4-22 17:13

回复 14楼 fxw451 的帖子

那你觉得“hello”在什么地方?
QQ:1625345502
点赞  2011-4-22 17:14

 p=(char *)malloc(sizeof(char)*10)中的分配有可能不成功所以要先判断 if(p == NULL)printf("memory is not ......."),分配不成功就返回。

第二呢独立的说p是一个已经声明的字符指针,同样的“hello”也是指针,是可以赋值,但“hello”的存储不需要另外一个字符数组,只用声明一个字符指针就行!而你却分配了十个指向字符的指针的空间,字符和字符串不一样。

 

这是我的一点看法,你在看看吧!


点赞  2011-4-22 17:41
"hello"就是一个常量,根本不需要malloc去分配空间,直接把p="hello"就可以了。如果像楼主题中这样malloc之后再把"hello"的地址赋值给p,malloc申请的空间的首地址就丢了,不能free了,内存泄露。。。。

[ 本帖最后由 txyugood 于 2011-4-22 19:57 编辑 ]
点赞  2011-4-22 19:53
多谢17,18楼两位~
长知识了
点赞  2011-4-22 19:57

回复 17楼 lbk32 的帖子

你说的对,但是没有说到根本上!~
QQ:1625345502
点赞  2011-4-22 20:13
1234下一页
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 京公网安备 11010802033920号
    写回复