c语言 - 我无法理解这个分段错误



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语句。

相关内容

  • 没有找到相关文章

最新更新