#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
提交
取消