为了账号安全,请及时绑定邮箱和手机立即绑定

现在功能已经实现,但是没有注释过的哪一行,返回的就是乱码,请教为什么?

现在功能已经实现,但是没有注释过的哪一行,返回的就是乱码,请教为什么?

qq_笑_17 2023-03-12 20:16:28
#include <stdio.h>#include <stdlib.h>#include <unistd.h>#include <errno.h>#include <string.h>int instrr(char *str,char *substr){char *p,*r;int flag=0,n=0;while(*str){n++;p=str;r=substr;while(*r)if(*p==*r){p++;r++;}else break;if(*r=='\0'){flag=1;break;}str++;}if(flag==0)n=0;return n;}char *Element(char *xml,char *eleBegin,char *eleEnd){int bdgin,end,len;//元素首地址,尾地址,长度char str[200];char ele[200];char *s;//char *ele;int k,i;len=strlen(eleBegin);bdgin=instrr(xml,eleBegin);end=instrr(xml,eleEnd);strcpy(str,xml);i=0;for (k=bdgin+len-1;k<end-1;k++){ele[i]=str[k];i++;}s=ele;//ele=TEMP;printf("\n%s\n",s);//这一行没有用,但是没他,返回的就是乱码return s;}main(void){char *a;char *b;char *c;char *d;a="lm";b="cd";c=Element("abcdefghijklmn",b,a);d=c;printf ("%s %s\n",d,c);}Element(char *xml,char *eleBegin,char *eleEnd)函数的目的是从xml字符串中把eleBegin和eleEnd之间的全部字符返回。
查看完整描述

2 回答

?
慕容3067478

TA贡献1773条经验 获得超3个赞

你的写法有问题...
char ele[200];
s=ele;
ele为函数内部定义的定长数组,等函数过程结束,对应的内存就会被自动释放,所以这样写是不对的
加了printf也不对,只是printf可能延迟了ele的释放

查看完整回答
反对 回复 2023-03-15
?
侃侃无极

TA贡献2051条经验 获得超10个赞

写法上有问题:
1. Element函数中,for循环后最好有个ele[i] = '\0',字符串的结尾符;
2. main函数可以用一些这种方式:
int main(void) {
char *a;
char *b;
char c[256];
//char c*;
char *d;
a="lm";
b="cd";
//int bufSize = 256;

//c=(char*)malloc(bufSize*sizeof(char));
//memset(c,0,bufSize);
strcpy(c,Element("abcdefghijklmn",b,a));
d=c;
printf ("%s,%s\n",d,c);
//free(c);

return EXIT_SUCCESS;
}


查看完整回答
反对 回复 2023-03-15
  • 2 回答
  • 0 关注
  • 66 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信