preface:我对编程和C一般都是新手。我正在经历K& r,并且正在尝试解决练习1-19。
我不明白是什么导致该线路j == i;。
中的分割故障我一直在尝试各种代码组合来找出问题。
我最初有一个循环来试图扭转角色数组,但根据练习,通过故障排除,我到达了j == i;线。
这两个值似乎没有错,但是尝试比较它们会给我一个错误。
#include <stdio.h>
#define MAXLENGTH 1000
int reverse(char line[]);
main()
{
int c = 0;
char line[MAXLENGTH];
while ((c = reverse(line)) != EOF) {
printf("%sn", c);
}
return 0;
}
int reverse(char line[])
{
char r[MAXLENGTH];
int i, c, j, l;
i = c = j = l = 0;
printf("BEFORE GETARRAYn");
while ((c = getchar()) != 'n' && c != EOF) {
line[i] = c;
i++;
printf("i: %dn", i);
}
l = i - 1;
printf("i: %dn", i);
printf("l: %dn", l);
printf("j: %dn", j);
printf("BEFORE REVERSINGn");
j == i;
return c;
我希望比较得出的结论而不会出错。
如果您不仅可以描述出什么问题,还可以描述为什么我可以尝试改进,那将是很棒的。
j == i;
行没有引起问题,它没有做任何事情。问题在这里:
while ((c = reverse(line)) != EOF) {
printf("%sn", c);
}
您正在尝试打印一个字符串,但您正在给它c
,即int
。将错误的数据类型传递给printf
是未定义的行为,这就是导致您的分割故障的原因。您可能想要这个:
printf("%sn", line);
还要注意,您还没有将字符串终止。在您的reverse
功能中,您需要此:
printf("BEFORE REVERSINGn");
line[i] = ' ';
线j == i
与您的分割故障完全无关。分割故障的主要问题是您的printf("%sn", c);
语句。因为您正在尝试在传递int作为参数的同时打印字符串。如果要打印getchar
的结果,则可以使用函数putchar
或替代printf("%c")
。尝试一下,不应该崩溃。
#include <stdio.h>
#define MAXLENGTH 1000
int reverse(char line[]);
int main()
{
int c = 0;
char line[MAXLENGTH];
while ((c = reverse(line)) != EOF) {
putchar(c);
}
return 0;
}
int reverse(char line[])
{
int i, c, j, l;
i = c = j = l = 0;
printf("BEFORE GETARRAYn");
while ((c = getchar()) != 'n' && c != EOF) {
line[i] = c;
i++;
printf("i: %dn", i);
}
l = i - 1;
printf("i: %dn", i);
printf("l: %dn", l);
printf("j: %dn", j);
printf("BEFORE REVERSINGn");
return c;
}
我还删除了冗余j == i
语句。