c语言中指针相关问题

问题是编写函数实现在字符数组w中插入字符x。函数原型为void fun(char *w, char *x, int *n)说明:1)假设w数组中的数已按照从小到大递增有序。2)n指向数组元素个数整型变量。3)插入x后数组中数据元素仍然递增有序。

#include  <stdio.h>
void fun(char* w, char x, int* n)
{
    int i, p;
    p = 0;
    w[*n] = x;
    while (x > w[p]) 
    p++;
    for (i = *n; i > p; i--)
    w[i] = *(w + i - 1); 
    w[p] = x;
    ++* n;
}
#include  <stdio.h>
void fun(char* w, char *x, int* n)
{
    for( int i = *n ; w[i] != '\0' ; i++ ){
        w[i+1] = w[i];
    }
    w[*n] = *x; 
}
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
void fun(char* w, char x, int *n)
{
    int i,p;
    p=0;
    w[*n] = x;
    while (x > w[p])p++;
    for (i = *n; i > p; i--) w[i] = w[i-1];
    w[p] = x;
    ++ *n;
}

int main() {
    char* a = (char*)malloc(7);
    const char c[8] = "abcdefh";
    strcpy(a,c);
    char b = 'g';
    int *n = (int *)malloc(4);
    *n = 8;
    fun(a,b,n);
    printf("%s",a);
    return 0;
}