使用递归反转数组内容(C语言)

uni*_*joy 0 c arrays recursion reverse

函数reverseAr()接受两个参数,一个char(ar [])数组和数组(n)的大小,然后反转数组的内容(不使用另一个数组).然后,该函数将通过参数ar将结果返回给调用函数.

我的代码似乎无法运行,我想我错误地传递了函数之间的值,但我无法弄清楚在哪里.

这是代码:

#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h> 
#include <string.h> 
#include <math.h> 

void reverseAr(char ar[], int n);

int main()
{
    char str[128];
    int len;

    printf("\nEnter an array of characters: ");
    gets(str);
    len = strlen(str);
    printf("The reversed array of characters is = %s\n", reverseAr(str, len));

    return 0;
}

void reverseAr(char ar[], int n)
{
    char temp = ar[0];
    ar[0] = ar[n - 1];
    ar[n - 1] = temp;
    if (n > 1) 
    {
        reverseAr(++ar, n - 2);
    }
}
Run Code Online (Sandbox Code Playgroud)

预期产量:

Enter an array of characters: abcde
The reversed array of characters is = edcba
Run Code Online (Sandbox Code Playgroud)

unw*_*ind 5

这个:

char str;

gets(str);
Run Code Online (Sandbox Code Playgroud)

是未定义的行为,应该给出您忽略的编译器警告(甚至错误).

gets()需要一个指向一个字符数组的指针,你给它一个字符的值,这根本不是一回事.它会将该字符的未定义值解释为地址,并将输入文本存储在那里.

它应该是:

int main()
{
  char line[128];

  printf("\nEnter an array of characters: ");
  if(fgets(line, sizeof line, stdin) != NULL)
  {
    const size_t len = strlen(line);
    printf("The reversed array of characters is = %s\n", reverseAr(line, len));
  }
  return 0;    
}
Run Code Online (Sandbox Code Playgroud)

返回类型strlen()不是int,size_t所以你应该使用它,并相应地改变reverseAr().