【发布时间】:2021-07-01 05:16:03
【问题描述】:
我正在编写一个函数,它应该反转给定的单词或输入,但是当我调用它时程序会一直停止。
代码是:
#include <stdio.h>
#define MAX 1000
void reverse(char normal[], char reversed[]);
main() {
int c, i;
char line[MAX], reversed_line[MAX];
for (i=0; (c = getchar()) != EOF && c != '\n'; i++) {
line[i] = c;
if (c == '\n')
i++;
}
line[i] = '\0';
copy(line, reversed_line);
printf("%s", reversed_line);
return 0;
}
void reverse(char normal[], char reversed[]) {
int i, len;
for (i = 0; normal[i] != '\0'; i++)
len++;
i = 0;
while ((reversed[len-i] = normal[i]) != '\0')
i++;
}
程序停止的行是copy(line, reversed_line);,它给出的错误是[Error] ld returned 1 exit status
任何帮助将不胜感激
【问题讨论】:
-
阅读n1570,见this C reference,你的C编译器的文档(例如GCC..被调用为
gcc -Wall -Wextra -g)和调试器(例如GDB.. .)。如果允许,请使用Clang static analyzer -
您在
main中的第一个for循环可能会触发buffer overflow。我建议改用fgets...您的错误发生在编译时,因此请阅读gcc使用的GNU binutils 的文档。此外,MAX应重命名(例如,MAXLINELENGTH)以提高可读性 -
阅读Modern C并下载,然后研究GNU libc的源代码,因为它是free software。从GNU bash的源代码中获取灵感
-
您应该查阅任何 C 教科书以了解
main函数签名的外观。隐式int类型和空参数列表是一个早已过去的世纪的特征。 -
@BasileStarynkevitch :研究 libc 或 bash 源代码来解决这个简单的初学者误解是一把大锤,可能会进一步混淆。我不会提出建议。
标签: c reverse c-strings function-definition