c语言中 输出乱码问题

来源:百度知道 编辑:UC知道 时间:2024/07/04 06:11:44
#include "string.h"
#include "stdio.h"

char *leftTag(char *s2){
char *s1;
char a[10];
strcpy(a,"<");
s1=a;
strcat(s1,s2);
strcat(s1,">");
return s1;
}

main()
{
char *input="abc";
printf("%s",leftTag(input));

}

为什么这个输出为乱码啊 而在函数中输出是正常的
该如何修改?
正常的应该是输出<abc>

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;
}