#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的释放
侃侃无极
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;
}
添加回答
举报
0/150
提交
取消