【发布时间】:2021-07-13 13:20:02
【问题描述】:
尝试在 C 中打印反向输入:
#include <stdio.h>
#define MAX_SIZE 100
/* Reverses input */
void reverse(char string[], char reversed[]);
int main() {
char input[MAX_SIZE], output[MAX_SIZE + 1];
char c;
int index = 0;
while ((c = getchar()) != '\n')
{
input[index] = c;
++index;
}
reverse(input, output);
printf("%s\n", output);
}
void reverse(char string[], char reversed[]) {
int rev;
rev = 0;
for (int str = MAX_SIZE - 1; str >= 0; --str) {
if (string[str] != '\0') {
reversed[rev] = string[str];
++rev;
}
}
}
但是有这个奇怪的结果:
输入:
abc
输出:
?:? ????:???:?cba?
输入和输出数组都包含\0,所以我猜有一些索引越界异常,但我无法找到确切的位置。谢谢。
【问题讨论】:
-
您需要将
index传递给reverse,这样您才能使用实际大小而不是MAX_SIZE。 -
在尝试反转字符串之前,您知道字符串的大小。为什么不在反向函数中使用它(
void reverse(char string[], char reversed[], size_t len))?您正在反转MAX_SIZE字符,其中只有index字符需要反转。 -
另外,显示的代码不能保证任何数组都包含
'\0' -
@500-InternalServerError 谢谢,现在可以工作了,但我仍然不明白为什么我会在输出中得到这些随机字符。
-
@pmg 也谢谢你,是的,你是对的
\0。我忘记了垃圾值
标签: c reverse c-strings function-definition