前言:总的来说,我对编程和 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("%s\n", c);
}
return 0;
}
int reverse(char line[])
{
char r[MAXLENGTH];
int i, c, j, l;
i = c = j = l = 0;
printf("BEFORE GETARRAY\n");
while ((c = getchar()) != '\n' && c != EOF) {
line[i] = c;
i++;
printf("i: %d\n", i);
}
l = i - 1;
printf("i: %d\n", i);
printf("l: %d\n", l);
printf("j: %d\n", j);
printf("BEFORE REVERSING\n");
j == i;
return c;
我希望比较结果没有错误。
如果您不仅可以描述问题所在,还可以描述原因,以便我可以尝试改进,那就太好了。
最佳答案
j == i;
行没有引起问题,它没有做任何事情。问题在这里:
while ((c = reverse(line)) != EOF) {
printf("%s\n", c);
}
您正在尝试打印一个字符串,但您给它的是 c
,这是一个 int
。将错误的数据类型传递给 printf
是未定义的行为,这就是导致段错误的原因。你可能想要这个:
printf("%s\n", line);
另请注意,您还没有以 null 终止字符串。在您的 reverse
函数中,您需要:
printf("BEFORE REVERSING\n");
line[i] = '\0';
关于c - 我无法理解这个段错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55936537/