请问为什么没有输出,逆序

逆序

#include<stdio.h>
void  f(char *p){
int i=0;
while(*(p+i)!='\0'){
    i++;
}
int a=0;
int x=i-1;
char t;
while(x>i/2){
    t=*(p+a);
    *(p+a)=*(p+i-a);
    *(p+i-a)=t;
    a++;
    x--;
}

}
int  main(){
        char  st[20];
        scanf("%s",st);
        f(st);
        printf("%s",st);        
}

img


vbkkhcdsrghknbcxseyjkbhfesxhmkkhhvccseesvbjooknbxddguu

img

首先,你想逆序,那要两两交换啊,两两交换会吧,想要交换a和b,你需要引入一个c
c=a;
a=b;
b=c;
这样才是交换,否则你是用后半截的值给前半截赋值,最后变成一个回文
其次,i的最后位置是\0,你把\0给赋值到第一个字符了,那不就成了个空字符串吗,x=i-1才对呀

改成这样试试
 *(p+a) = *(p+i-a-1)

scanf的第二个参数,缺少了&符号。