c语言中打印字符串--为什么打印出来的是乱码不是abcd

#include <stdio.h>
#include <stdlib.h>

char * a();
void main()
{
char *str=a();
printf("%s",str);
}
char * a()
{
char b[]="abcd";
return b;
}

因为在函数a中,b是一个局部变量,其作用范围只在当前函数中有效,当该函数结束时,b数组已经消亡,所以即使你此时返回b的地址,里面的内容也已经不存在了(有些编译器可能会看到b数组的内容仍然存在,但这只是某个编译器的个别行为,C语言标准是不能保证数组内容仍然存在的)。
温馨提示:答案为网友推荐,仅供参考
第1个回答  2017-07-21
#include <stdio.h>
#include <string.h>
#include <stdlib.h>

void a(char * ss);
void main(){
 char s1[10];
 char *str=s1;
 a(str);
 printf("%s\r\n",str);
}

void a(char * ss){
 char s1[]="abcd";
 strcpy(ss, s1);
}


//放在参数中返回

相似回答