初学者请教一下关于C语言逆序字符串的问题

为什么显示Memory space at 0x1000b8(object 'p') is not initialized

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

void fun(char *str)

{
    char *p;
    int i=0;
    if(*str!='\0'){
        fun(str+1);
        *p=*str;
    }
    for(i=0;i<strlen(str)-1;i++){
        str[i]=p[i];
    }
}

int main()
{
    char *a="abcdefg";
    fun(a);
    printf("%s\n",a);
}


修改如下,供参考:

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

void fun(char* str)
{
    char* p = str, c;
    while (*p) p++;
    p--;
    if (str < p) {
        c = *str;
        *str = *p;
        *p = '\0';
        fun(str + 1);
        *p = c;
    }
}
int main()
{
    char a[] = "abcdefg";//char *a = "abcdefg";
    fun(a);
    printf("%s\n", a);
    return 0;
}

#include <stdio.h>
#include <string.h>
int main()
{
char a[]={"abcdef"},k[100];
int u=0;
for(int i=strlen(a)-1;i>=0;i--){
//cout<<a[i];
k[u]=a[i];
u++;
}
printf("%s\n",k);
}

这个地方由于有多个字符
所以要用字符数组