为什么我在阅读整数的CSV时会出现分段错误?

7bsow1i6  于 9个月前  发布在  其他
关注(0)|答案(1)|浏览(84)

以下是test.csv的内容,

95,47
460,215

字符串
我写了一个C程序把它读入一个长的长数组。

#include <stdio.h>

#define DIM 2

void read(char path[], long long (*B)[DIM]);

int main(int argc, char *argv[]) {
  long long B[DIM][DIM];
  read("test.csv", B);
  for (int i = 0; i < 2; i++)
    for (int j = 0; j < DIM; j++)
      printf("%lld\n", B[i][j]);
  return 0;
}

void read(char path[], long long (*B)[DIM]) {
  int i, j;
  int c, sign = 1;
  long long number = 0;
  FILE *fp = fopen(path, "r");
  if (fp) {
    while ((c = getc(fp)))
      if (c == '-') {
        sign = -1;
      } else if (c == ',') {
        B[i][j++] = sign * number;
        sign = 1;
        number = 0;
      } else if (c == '\n') {
        B[i++][j] = sign * number;
        j = 0;
        sign = 1;
        number = 0;
      } else if (c == EOF) {
        B[i][j] = sign * number;
        break;
      } else if ('0' >= c || c <= '9') {
        number = (number * 10) + (c - '0');
      }
    fclose(fp);
  } else {
    printf("File %s not found.\n", path);
  }
}


我的C有点生疏了,这让我出现了一个分段错误。我不明白为什么?有趣的是,如果我在main中注解2D循环,那么程序运行良好。

dfddblmv

dfddblmv1#

在使用变量之前总是初始化它们:

void read(char path[], long long (*B)[DIM]) {
  int i = 0, j = 0;    // i and j should be initialized to zero
  // ...
}

字符串

相关问题