a[10]是在子函数中定义的,生命周期应该和子函数一样。出了子函数就会被销毁、
你在主函数中调用leftTag(input)后,a[10]是在子函数中分配的内存空间。回到,主函数后你还要引用那块被销毁了的内存。打印出来的肯定是乱码。
知道了问题的所在。相应的解决办法就是。增加a[10]所对应的内存空间的生命周期。
1、用malloc函数使在堆上分配内存。
#include <string.h>
#include <stdio.h>
#include <malloc.h>
char *leftTag(char *s2)
{
char *s1 = (char*)malloc(10 * sizeof(char)); //注意这里
strcpy(s1,"<");
strcat(s1,s2);
strcat(s1,">");
return s1;
}
int main()
{
char *input="abc";
printf("%s",leftTag(input));
return 0;
}
2、a[10]在主函数中定义,生命周期自然就和主函数一样了。
#include "string.h"
#include "stdio.h"
char *leftTag(char *s2,char *a[]) // 这改了
{
char *s1;
strcpy(a,"<");
s1=a;
strcat(s1,s2);
strcat(s1,">");
return s1;
}
int main()
{
char *input="abc", a[10];
printf("%s",leftTag(input,a));
return 0;
}
温馨提示:答案为网友推荐,仅供参考