为什么我在读取整数 CSV 时遇到分段错误?

问题描述 投票:0回答:1

以下是

test.csv
的内容,

95,47
460,215

我编写了这个 C 程序来将其读入一个 long long 数组。

#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 循环,那么程序运行正常。

c segmentation-fault
1个回答
0
投票

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

void read(char path[], long long (*B)[DIM]) {
  int i = 0, j = 0;    // i and j should be initialized to zero
  // ...
}
© www.soinside.com 2019 - 2024. All rights reserved.