gpt4 book ai didi

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

转载 作者:太空宇宙 更新时间:2023-11-04 05:09:50 31 4
gpt4 key购买 nike

函数 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);
}
}

预期输出:

Enter an array of characters: abcde
The reversed array of characters is = edcba

最佳答案

这个:

char str;

gets(str);

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

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;
}

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

关于c - 使用递归反转数组内容(C语言),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22531804/

31 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com