我正在尝试重新创建 cat 实用程序并在不带参数的情况下执行此代码会导致分段错误。可能是什么原因造成的?

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

如果使用任何参数,程序将按预期运行

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define BUFFSIZE 10000

int main(int argc, char *argv[]) {
  FILE *fp;
  char buff[BUFFSIZE];
  int currentFile = (argc > 1 ? 1 : 0);
  while (currentFile < argc) {
    if (argc > 1) {
      fp = fopen(argv[currentFile], "rb");
      if (fp == NULL) {
        fprintf(stderr, "%s: %s: No such file or Directory", argv[0],
                argv[currentFile]);
        exit(1);
      }
    }
    while (fgets(buff, BUFFSIZE, (fp == NULL ? stdin : fp))) {
      int len = strlen(buff);
      buff[len - 1] = '\0';
      fprintf(stdout, "%s\n", buff);
    }
    fclose(fp);
    currentFile++;
  }
  return 0;
}

我相信这个问题在某种程度上与 NULL 被传递到 fgets 有关,但我缺乏 c 经验不允许我正确诊断问题。

c bash cat
1个回答
0
投票

通过向

FILE *fp
添加适当的初始化来修复。 谢谢你们,伙计们。

© www.soinside.com 2019 - 2024. All rights reserved.