请帮我完善下面的程序

1.调用merge函数,实现将指针s所指的字符串的反序和正序连接后形成一个新的字符串并存放在原处。如字符串为“1234”,执行函数后,字符串为“12344321”。请完善程序。
说明
(1)函数形参为字符指针,调用时指针s指向字符串首地址。
(2)函数中定义了指针p和q,循环开始时指针p指向串的最后一个字符,指针q指向最后一个字符后的地址。每循环一次,反序取出串的字符并依次存放到新的位置,直到处理完所有字符。最后在新字符串尾部放入字符串结束符’\0’。

img

第一空:void merge(char *s) , 这个是根据函数定义来声明函数;

第二空,merge(str) ,同样是根据函数定义来调用函数, 向函数传入字符数组首地址;

第三空,n=strlen(s),n赋值为字符串的长度,以便下面代码定位字符位置。

补充如下:


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

int main(void){
    
    char str[100];
    // 第一空,根据下面的函数定义,此处添加函数的声明 
    void merge(char *s);  
    printf("Please enter a string:");
    gets(str);
    // 第二空,根据函数定义来调用函数,传入字符指针 
    merge(str);
    printf("Inverted and connecting after:");
    puts(str);
    
    return 0;     
} 

void merge(char *s){
    
    char *p,*q,n;
    // 第三空 ,n赋值为字符串的长度,以便下面代码定位字符位置 
    n = strlen(s);
    for(p=s+n-1,q=s+n;p>=s;p--,q++){
        *q=*p;
    }
    *q='\0';
    
    
}

img

程序补充如下所示,已经编译验证过了!

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

int main()
{
    char str[100];
    void merge(char *s);
    printf("please enter a string:");
    gets(str);
    merge(str);
    printf("Inverted and connecting after:");
    puts(str);
    return 0;

}

void merge(char *s)
{
    char *p,*q,n;
    n=strlen(s);
    for(p=s+n-1,q=s+n; p>=s;p--,q++)
    {
        *q=*p;
    }
    *q='\0';
}