一个关于c语言realloc的问题

#include<stdio.h>#include<conio.h>#include<stdlib.h>structHstring{char*ch;intlength;}... #include <stdio.h>
#include <conio.h>
#include <stdlib.h>
struct Hstring{

char *ch;
int length;
};
int putin(Hstring &S)

{
printf("输入字符串");
if(S.ch)
free(S.ch);
S.length=0;
S.ch=(char *)malloc(sizeof(char));
int i;
for(i=0;i==0||*(S.ch+i-1)!='\n';i++)
{if(S.length<i)
S.ch=(char *)realloc(S.ch,(S.length+1)*sizeof(char));
scanf("%c",&*(S.ch+i));
S.length++;
}
S.length--;
return 0;
}

int printout(Hstring S)
{
int i;
for(i=0;i<S.length;i++)
printf("%c",*(S.ch+i));
return 0;
}
int StrInsert(Hstring &S,int i,Hstring T)
{
printf("´串插入\n");
printf("串S:");
putin(S);
printf("串T:");
putin(T);
printf("输入i:");
scanf("%d",&i);
printf("S.ch :%x\n",S.ch);
S.ch=(char *)realloc(S.ch,(S.length+T.length)*sizeof(char));
if(!S.ch) printf("error");
printf("S.ch :%x\n",S.ch);
i--;
int j;
printout(S);
printf("a\n");
printout(T);
printf("\n");
for(j=0;j<T.length;j++)
*(S.ch+S.length+j)=*(S.ch+i+j);
for(j=0;j<T.length;j++)
*(S.ch+i+j)=*(T.ch+j);
S.length=S.length+T.length;
printout(S);
return 0;
}

int main()
{
Hstring S,T;int i;
T.ch=S.ch=NULL;
StrInsert(S,i,T);
getch();
return 0;
}
在使用realloc中,发现了一点问题,死活都过不去,我不知道这是什么问题,希望能得到解答,问题如下
在c程序中
StrInsrt函数中,我调用自己编写的函数输入(putin())输入(printout())函数输入输出字符串,这里都没有什么问题
函数StrInsert中,先对S,T通过键盘赋字符串。
然后输出S.ch字符指针的地址,
使用realloc进行内存拓展。
按照realloc的功能,将先判断后面的空间是否够,如果够的话,直接在已开辟的空间的后面加上多余的空间,如果不够的话,另辟空间,然后把原来空间里面的值赋给新的空间,也就是说,无论如何,只是不可能丢掉的。
但是按照我的这个程序,在realloc S.ch后,输出S.ch的内存,发现内存发生改变,然后输出S.ch的字符串,并以'a'结尾,发现除了第一个字符以外,其他的字符全部丢失了,我不知道这是为什么,希望能得到解答。
不知道是realloc用错的还是其他的什么原因,很困惑,望大神。
展开
 我来答
_whales
2013-04-25 · TA获得超过2279个赞
知道大有可为答主
回答量:1814
采纳率:85%
帮助的人:507万
展开全部
if(S.length<i) // S.length始终等于i; 条件永不满足,循环中内存,一直没有重新分配大小
S.ch=(char *)realloc(S.ch,(S.length+1)*sizeof(char));
你的程序应该会出错的!!
百度网友3fe025987
2013-04-25 · TA获得超过1874个赞
知道小有建树答主
回答量:1055
采纳率:62%
帮助的人:551万
展开全部
不懂,既然是自己编写输入输出函数 怎么又用到printf了?
StrInsert(S,i,T); 这是你传递的参数,你看看你函数定义里的参数。

亲,你真的编译通过了吗?
自己编写难度应该很大吧。涉及底层驱动吧。不太会。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

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

类别

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

说明

0/200

提交
取消

辅 助

模 式