一个关于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用错的还是其他的什么原因,很困惑,望大神。 展开
#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用错的还是其他的什么原因,很困惑,望大神。 展开
2个回答
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询