c语言中运用调用函数容易犯的错误,为什么这个函数只能调用一次,调用第2次机会出现错误...

已结贴√

问题点数:20 回复次数:7

ca56232b3bbedf9a539d07f37fffb99a.gif

3144d8b7615c79d9f638db40d5689d26.gif

a218af6549b45ee526caf607ebff1358.gif

0f8df0e29816ae721419de940fb833d1.gif

为什么这个函数只能调用一次,调用第2次机会出现错误

# include

# include

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;

}

搜索更多相关主题的帖子:

include