为什么这个函数只能调用一次,调用第2次机会出现错误
# include <stdio.h># include <malloc.h>
struct pp
{
char *k;
struct pp *cj;
};
void sp(char *c,struct pp *pc,char *len1,int pl,char **RT)
{
int len=1;
int pdf=1;
int pd=1;
int ii=0;
pc=(struct pp *)malloc(sizeof(struct pp));//第一次调用的时候这里没出现问题,第2次调用的时候这里pc地址=0x0000000空
char *js=0;
struct pp *s=pc;
pc->cj=NULL;
while(len=*c)
{
if(len<0)
{
pdf=pdf+1;
}
if(len==0)
{
//printf("字符串=NULL/字符串个数=%d\n",len);
//getchar();
}
else
{
struct pp *sv=(struct pp *)malloc(sizeof(struct pp));
sv->k=c;
//printf("%c\n",*c);
s->cj=sv;
sv->cj=NULL;
s=sv;
pdf++;
if(len<0)
{
//printf("第%d元素类型为中文无法显示 ",pd++);
//printf("%c%c\n",c[0],c[1]);
//c++;
}
else
{
//printf("第%d元素是%c\n",pd++,*c);
}
c++;
}
}
//printf("字符指针扫描完成!长度为%d\n",pd-1);
//printf("实际长度为%d\n",pdf-1);
struct pp *cr=pc;
for (int i=1;i<=pl;i++)
{
cr=cr->cj ;
//printf("%c\n",*(cr->k) );
//printf("%d\n",i);
//getchar();
}
cr->k=len1;
//printf("%c",*(cr->k));
/*struct pp *lP=pc->cj;
char *NU='\0';
struct pp *WI=(struct pp *)malloc(sizeof(struct pp));
WI->cj =NULL;
//WI->k=*NU;
for(int len3=1;len3<=(pd-1);len3++);
{
lP=lP->cj;
printf("最后%#X\n",lP );
}*/
//getchar();
struct pp *se=pc->cj;
char *zf=(char *)malloc(sizeof(char)*pd-1);
int cs=1;
int len2=0;
while(se->cj!=NULL/*,(len2++)!=(pd-1)*/)
{
//len2=len2+1;
cs=*(se->k);
if(cs<0)
{
zf[len2+1]=*(se->k);
zf[len2+2]=*(se->k);
getchar(); //printf("%c%c",se->k[0],se->k[1]);
}
else
{
zf[len2]=*(se->k);
//printf("%c",*(se->k) );
}
se=se->cj;
len2=len2+1;
/*if(len2==(pd-1))
{
char *NU='\0';
se->k=NU;
}*/
}
zf[len2]='\0';
//for(int u=0;u<=10;u++)
//printf("%s\n",zf);
*RT=zf;
return;
}
int main(void)
{
struct pp pc;
char * str="12345678ABCDTSDHFdfjddfg PPPat!=NULL";//暂时不能装中文,编码不懂,
printf("原始str==%s\n",str);
char g='B';
sp(str/*指针字符串的地址*/
,&pc
,&g/*替换g变量*/
,3/*在第str[?个位置修改]*/
,&str/*字符串地址的地址*/);
printf("输出str==%s\n",str);
//为什么函数不能调用2次,调用了会出错
sp(str/*指针字符串的地址*/
,&pc
,&g/*替换g变量*/
,3/*在第str[?个位置修改]*/
,&str/*字符串地址的地址*/);
printf("输出str==%s\n",str);
//str=0;
//int cd=*str;
//
/*for(int i=0;i<9;i++)
{
if(*str==0)
{
printf("结束!\n");
getchar();
}
else
{
printf("%c ",*str);
printf("当前str16进制地址为;%#x \n",str);
printf("当前*str16进制地址为;%#x \n",*str);
printf("当前*str16&进制地址为;%#x \n",&(*str));
getchar();
}
str++;
}*/
return 0;
}