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)
这个:
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().