| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 668 人关注过本帖
标题:[求助]关于动态存储分配函数的疑问
只看楼主 加入收藏
梨禁令
Rank: 1
等 级:新手上路
帖 子:18
专家分:0
注 册:2006-8-16
收藏
 问题点数:0 回复次数:6 
[求助]关于动态存储分配函数的疑问
下面我的写的动态数组的程序,编译可以通过,不过就是得不到我想要的结果,老是在结果前面多些奇怪的东西,请大家帮忙看下。
#include"stdio.h"
#include"stdlib.h"
main()
{char c,*a,n;
a=(char*)malloc(1);
for(n=2;c!='\n';c=getchar(),n++)
{
a=(char*)realloc(a,n);
a[n-2]=c;
}
a[n-1]='\0';
printf("%s\n",a);
free(a);
getch();
}
我书上的realloc函数的原型是void *realloc(xoid *f,unsignde size);
好象我在那里看到的这个函数原型是三个参数?
搜索更多相关主题的帖子: 函数 疑问 动态 
2006-09-16 18:25
nuciewth
Rank: 14Rank: 14Rank: 14Rank: 14
来 自:我爱龙龙
等 级:贵宾
威 望:104
帖 子:9786
专家分:208
注 册:2006-5-23
收藏
得分:0 
以下是引用梨禁令在2006-9-16 18:25:25的发言:
下面我的写的动态数组的程序,编译可以通过,不过就是得不到我想要的结果,老是在结果前面多些奇怪的东西,请大家帮忙看下。
#include"stdio.h"
#include"stdlib.h"
main()
{char c,*a,n;
a=(char*)malloc(1);//写成这样会好点,虽然这里没有错 a=(char *)malloc(sizeof(char));
for(n=2;c!='\n';c=getchar(),n++) //这里应该先给C赋值,再判断.for(n=2;(c=getchar())!='\n';n++)
{
a=(char*)realloc(a,n);
a[n-2]=c;
}
a[n-1]='\0'; //这个错了,应该是a[n-2]='\0';因为你的元素只有n-2个.
printf("%s\n",a);
free(a);
getch();
}
我书上的realloc函数的原型是void *realloc(void *f,unsignde size);是这样.
好象我在那里看到的这个函数原型是三个参数?


倚天照海花无数,流水高山心自知。
2006-09-16 19:26
nuciewth
Rank: 14Rank: 14Rank: 14Rank: 14
来 自:我爱龙龙
等 级:贵宾
威 望:104
帖 子:9786
专家分:208
注 册:2006-5-23
收藏
得分:0 
#include"stdio.h"
#include"stdlib.h"
#inclue"malloc.h"//许多编译器要包含这个才可以动态分配内存,上面那个可能没有包括.
main()
{char c,*a,n;
a=(char*)malloc(sizeof(char));
for(n=2;(c=getchar())!='\n';n++)
{
a=(char*)realloc(a,n);
a[n-2]=c;
}
a[n-2]='\0';
printf("%s\n",a);
free(a);
getch();
}

倚天照海花无数,流水高山心自知。
2006-09-16 19:28
梨禁令
Rank: 1
等 级:新手上路
帖 子:18
专家分:0
注 册:2006-8-16
收藏
得分:0 
非常感谢您的指点
元素应该是n-2个我想明白了
不过我还不明白第一个错误
我觉得c=getchar()和(c=getchar())!='\n'都是给C赋值啊,看不出区别在那里


2006-09-17 12:23
dlnhsr
Rank: 1
等 级:新手上路
帖 子:11
专家分:0
注 册:2006-6-5
收藏
得分:0 
http://www.mcublog.com/blog/user1/8471/archives/2006/11315.html
有讲ralloc这个函数还有其它存储空间的分配函数,看看吧

2006-09-17 14:20
nuciewth
Rank: 14Rank: 14Rank: 14Rank: 14
来 自:我爱龙龙
等 级:贵宾
威 望:104
帖 子:9786
专家分:208
注 册:2006-5-23
收藏
得分:0 
以下是引用梨禁令在2006-9-17 12:23:21的发言:
非常感谢您的指点
元素应该是n-2个我想明白了
不过我还不明白第一个错误
我觉得c=getchar()和(c=getchar())!='\n'都是给C赋值啊,看不出区别在那里


for(n=2;c!='\n';c=getchar(),n++)

第一次循环的时候,C没有初值,系统给它的是随机值,如果一开始c=='\n',你后面的就没有意义了.
如果你写成for(n=2;c=getchar(),c!='\n';n++) 就没有问题.


倚天照海花无数,流水高山心自知。
2006-09-17 18:25
梨禁令
Rank: 1
等 级:新手上路
帖 子:18
专家分:0
注 册:2006-8-16
收藏
得分:0 

谢谢2位的指点,我明白了

2006-09-18 11:14
快速回复:[求助]关于动态存储分配函数的疑问
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.043248 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved