C语言中用动态数组储存一个长度未知的字符串,应该怎么使用malloc和realloc函数?

 我来答
友油妮薅
推荐于2018-07-25 · 致力于回答相关问题。
友油妮薅
采纳数:109 获赞数:1222

向TA提问 私信TA
展开全部
char* buffer;
buffer = (char *)malloc(initialize size);
buffer = (char *)realloc(buffer, initialize size+add size);
一般做法是设定一个初始值,再设定一个追加值。
比如:*p初始分配10个字符空间。
当空间不够用的时候,每次增加20个字符空间。这样会增加效率。

象你这样:初始p = (char *)malloc(10);
当判断空间不够用的时候,重分配:
p = (char*)realloc(p, 10+100*n++); //n做重分配次数计数器,初值=1
如果再不够用,就再次调用:
p = (char*)realloc(p, 10+100*n++); //这时n=2了,n++后=3
new妞宁
2013-01-19 · TA获得超过1743个赞
知道小有建树答主
回答量:959
采纳率:100%
帮助的人:680万
展开全部
这是以前我写的代码,字符串存在buffer指针所在的缓冲区中
int readbuffer(char **buffer)
{
char*buftemp;
int size= 20,buf_totalcount,every_count; //每次从键盘读取的长度,最后的总长度,每次实际读取的字符数
buftemp = (char*)malloc(sizeof(char)*size);//每次分配20个字符大小缓冲区
printf("Please enter the digit number :\n");
buftemp = fgets(buftemp,size,stdin);//从键盘读取字符
every_count = strlen(buftemp); //每次实际接收的数据长度
buf_totalcount = every_count;//总长度变化
*buffer = (char*)malloc(sizeof(char)*(buf_totalcount+1));//为了最后保存结束符,多分配一位
strcpy(*buffer,buftemp);
while(buftemp[every_count-1]!='\n')//输入回车键即为输入结束
{
buftemp =fgets(buftemp,size,stdin);//从键盘读取字符
every_count = strlen(buftemp); //每次实际接收的数据长度
buf_totalcount +=every_count;//总长度变化
*buffer = (char*)realloc(*buffer,sizeof(char)*(buf_totalcount+1));//重新分配缓冲区
strcpy((*buffer)+buf_totalcount-every_count,buftemp); //拷贝本次结束的字符串
}
free(buftemp);//释放
buffer[buf_totalcount-1]='\0'; //填充结束符
returnbuf_totalcount-1;//返回实际字符串的长度
}
希望对你有帮助
追问
1.buftemp = fgets(buftemp,size,stdin);//从键盘读取字符
fgets函数是从文件里读取数据的,为什么你的注释是“从键盘读取数据”?
2.every_count = strlen(buftemp); //每次实际接收的数据长度
buf_totalcount = every_count;//总长度变化
这里buftemp的长度固定了为10*sizeof(char),为什么还要把这两句写得这样复杂。
为什么不能直接是every_count=10; buf_totalcount=10;?
3.没有被suftemp储存下的数据呢?
追答
stdin这个是标准输入流 即键盘输入 
fgets的意思不是一定读入size个大小的字符,如果少于size个但是你输入了回车符等它也就自动返回了 所以你不能保证你每次读入的额都是size个大小的
至于你说的第三个问题 不知道你在说什么

这些都是最基本的 哎 本来我写的程序是没有这么多注释了 为了你好理解 我都加了注释 谁知道你还没看懂 真是浪费
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
pardream941026
推荐于2017-10-09 · TA获得超过8217个赞
知道大有可为答主
回答量:4602
采纳率:89%
帮助的人:1340万
展开全部
char* buffer;
buffer = (char *)malloc(initialize size);
buffer = (char *)realloc(buffer, initialize size+add size);
更多追问追答
追问
我是在输入的时候就用,所以根本不知道应该追加多长的内存,
比如下面这个问题:
我要用*p存“ 一个100个字符的字符串,但实际上我的malloc开始的时候分配的事10个字节。那就得追加,但是怎么追加呢?
>>>求实际的代码
追答
一般做法是设定一个初始值,再设定一个追加值。
比如:*p初始分配10个字符空间。
当空间不够用的时候,每次增加20个字符空间。这样会增加效率。

象你这样:初始p = (char *)malloc(10);
当判断空间不够用的时候,重分配:
p = (char*)realloc(p, 10+100*n++); //n做重分配次数计数器,初值=1
如果再不够用,就再次调用:
p = (char*)realloc(p, 10+100*n++); //这时n=2了,n++后=3
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
柔软的Bp
科技发烧友

2013-01-19 · 智能家居/数码/手机/智能家电产品都懂点
知道大有可为答主
回答量:3万
采纳率:66%
帮助的人:8981万
展开全部
我不懂C语言,等高人来解决
来自:求助得到的回答
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 1条折叠回答
收起 更多回答(2)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

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

类别

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

说明

0/200

提交
取消

辅 助

模 式