c语言中,关于反转字符串。请问为什么输入ABCDE,不能反转。

#include

int main()
{
int i;
char String[20];
char Reverse[]={0};
printf("请输入字符串");
gets(String);
printf("你所输入的字符串为%s\n",String);
int size;
size=sizeof(String);

for(i=0;i<size-1;i++)
{
    Reverse[size-i-2]=String[i];
}

printf("输出源字符串:%s\n",String);
printf("输出目标字符串:%s\n",Reverse);

return 0;

}

修改后的代码如下,关键处有注释:

 int main()
{
    int i;
    char String[20];
    char Reverse[20] = { 0 };  //原代码Reverse大小为1
    printf("请输入字符串");
    gets_s(String);
    printf("你所输入的字符串为%s\n", String);
    int size;
    size = strlen(String); //用strlen库函数获取输入字符串的长度,需包含string.h头文件

    for (i = 0; i < size ; i++) //循环终止条件及循环体写法应修改为此
    {
        Reverse[size-i-1] = String[i];
    }
    printf("输出源字符串:%s\n", String);
    printf("输出目标字符串:%s\n", Reverse);

    return 0;

}

如果对您有帮助,请采纳答案好吗,谢谢!

char Reverse[]={0};这里只定义了一个位置,改改,char Reverse[20];

#include
#include

int main(int argc, char *argv[]) {
int i;
char String[20];
char Reverse[20];
printf("请输入字符串\n");
gets(String);
printf("你所输入的字符串为 %s\n",String);
int p=0;

for(i=19;i>=0;i--)
{
    Reverse[19-i] = String[i];
    printf("%c ",String[i]);
}
Reverse[19]='\0';
printf("输出源字符串 %s\n",String);
printf("输出目标字符串 %s\n",Reverse);

return 0;

}

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

int main(int argc, char *argv[]) {
    int i;
    char String[20];
    char Reverse[20];
    printf("请输入字符串\n");
    gets(String);
    printf("你所输入的字符串为 %s\n",String); 
    int p=0;

    for(i=19;i>=0;i--)
    {
        Reverse[19-i] = String[i];
        printf("%c ",String[i]);
    }
    Reverse[19]='\0';
    printf("输出源字符串 %s\n",String);
    printf("输出目标字符串 %s\n",Reverse);

    return 0;
}

#include<stdio.h>
#include<string.h>
int main()
{
int i,j;
char String[20];
char Reverse[20];
printf("请输入字符串");
gets(String);
printf("你所输入的字符串为%s\n",String);
int size;
j=size=strlen(String);

for(i=0;i<size;i++,j--)
{
    Reverse[i]=String[j-1];
}
Reverse[size]='\0';
printf("reverse:");
puts(Reverse);
printf("\n");
return 0;

}

for循环只的结束条件从size-1改成( size-1)/2