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

#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之间的全部字符返回。

qq_笑_17
浏览 67回答 2
2回答

慕容3067478

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

侃侃无极

写法上有问题: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;}
打开App,查看更多内容
随时随地看视频慕课网APP