返回值是数组,主函数应该如何调用

我想输出子函数里面的a数组,这段代码为什么不行呢?

#include<stdio.h>
#include<string.h>

char *fun()
{
    char a[] = {'1','2'};
    return a;
}

int main()
{
    char *b;
    b = fun();
    printf("%s", b );
}

char *fun()
{
    static char a[] = {'1','2'};
    return a;
}

函数部分改成这样就可以了

你错误的原因是:
你让函数返回了一个指针让b指向它是不假,

但是 这个函数中返回的指针a是一个局部变量, 返回之后, 指针a就会被释放掉, a数组的内容也不存在了

那么此时 b指向了哪里呢 指向的目标a数组已经消失了
指向了被撤销的内存地址 而这个地址上的内容已经没了

此时你再打印b的内容当然打不出来

你这个问题应该是栈内存跟堆内存的区别,如果指针指向函数的局部变量(存储在栈内)返回值时,当函数执行完了就会释放掉栈内存数据,最后你的指针指向了被释放的内存块,里面的数据是垃圾数据。

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


char *fun()
{
//    char a[] = {'1','2'};
    char *a = (char *)malloc(3*sizeof(char));
    memset(a,0x0,3);
    a[0] = '1';
    a[1] = '2';
    return a;
}

int main()
{
    char *b;
    b = fun();
    printf("%s", b );
}

如果不对,欢迎指正

#include<stdio.h>
#include<string.h>

char fun(char* b)
{
    char a[] = {'1','2'};
    strcpy(b, a);
}

int main()
{
    char b;
    fun(&b);
    printf("%s", &b );
}

望采纳,谢谢