这个C代码反转字符串有问题,但我不知道是什么?请帮忙

hsi*_*nxh 1 c string reverse

我开始编程.我写了这个小程序来反转一个字符串.但是如果我试图反转长度小于5个字符的字符串,那么它会输出错误的字符串.我似乎无法找到什么错误.

#include<stdio.h>
#include<string.h>
int main()
{
 char test[50];
 char rtest[50];
 int i, j=0;
 printf("Enter string : ");
 scanf("%s", test); 
 int max = strlen(test) - 1;
 for ( i = max; i>=0; i--)
 {
  rtest[j] = test[i];
  j++;
 }
 printf("Reversal is : %s\n", rtest); 

 return 0;
}
Run Code Online (Sandbox Code Playgroud)

CAF*_*FxX 5

您没有以0结束反转字符串.(C中的所有字符串都以0结尾)

在这种情况下,printf将(可能,取决于rtest数组的单位化内容)创建缓冲区溢出.

rtest[max+1]=0;在for循环之后添加一个,一切都应该没问题.否则你可以声明char rtest[50] = {0}(这将用0s初始化整个数组).

  • @Harbhag:数组`rtest`的内容是不确定的 - 它是**未定义的行为**试图访问它们(在赋值之前).有时它似乎有效 - 通常它不会. (3认同)