我最近向一位想学习 C 的朋友推荐了 K&R。他在第一章中遇到了一个练习,它给了他各种错误。我在我的 Ubuntu 安装上编译它,在 C90 选项和默认值之间交替。我已经查看了各个角度,但它似乎是完美的代码......但是每次运行它时它总是给我一个分段错误。我不是棚子里最聪明的程序员,但这让我很沮丧。
到底是什么导致了这样的错误?
这是代码:
#include <stdio.h>
#define MAXLINE 1000
void reverse(char s[]);
/* A program that reverses its input a line at a time */
main()
{
int c, i;
char line[MAXLINE];
for (i = 0; (c = getchar()) != EOF; ++i) {
line[i] = c;
if (c == '\n') { /* Upon encountering a newline */
line[i] = '\0'; /* replace newline with null terminator */
i = 0;
reverse(line);
printf("\n%s\n", line);
}
}
return 0;
}
/* A function that reverses the character string */
void reverse(char s[])
{
int a, z;
char x;
for (z = 0; s[z]; ++z) /* Figure out where null terminator is */
;
--z;
for (a = 0; a != z; ++a) { /* Reverse array usinng x as placeholder */
x = s[a];
s[a] = s[z];
s[z] = x;
--z;
}
}