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

时间:2011-01-10 11:35:17

标签: 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;
}

3 个答案:

答案 0 :(得分:5)

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

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

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

答案 1 :(得分:2)

测试未初始化。

你应该添加rtest [j] ='\ 0';在for循环之后说出字符串结束的位置

答案 2 :(得分:1)

void reverse(char* str)
{
 int len = strlen(str);
 for (int i = 0; i < len / 2; ++i) {
  char tmp = str[i];
  str[i] = str[len - 1 - i];
  str[len - 1 - i] = tmp;
 }
}