为什么我会得到一个浮点异常?

时间:2012-04-04 19:05:56

标签: c

在尝试为C做一些论证时,我发现让argv[]工作真的很难。我有:

int main(int argc, char *argv[])
{
  void updateNext();
  void fcfs();
  void spn();
  void srt();

  fp = fopen(argv[0],"r");
  op = fopen("output.dat","a+");

  if (strcmp(argv[1],"FCFS")!=0)
  {
    fcfs();
  }

  if (strcmp(argv[1],"SPN")!=0)
  {
    spn();
  }

  if (strcmp(argv[1],"SRT")!=0)
  {
    srt();
  }
}

我想以myprog input.data FCFS的格式输入内容,但上面的代码给出了“浮点异常”的错误,在我将input.dat硬编码为字符串之后,异常消失了该程序。或许argv[0]有问题吗?

2 个答案:

答案 0 :(得分:7)

在C中,argv[0]是程序的名称(或者更确切地说,用户在命令行上输入的第一个单词来运行程序,如果从shell运行的话)

因此,为了您的目的而避免argv[0],您需要查看argv[1]的文件名,argv[2]查看其他参数。

如果您使用调试器跟踪程序,或者只是在使用之前打印了值,那么这一点就很清楚了:

printf("using file name %s\n", argv[0]);
fp = fopen(argv[0],"r");

通过在访问argc之前验证argv来检查您是否有足够的命令行参数,这也是一个好主意:

if (argc < 3) {
    fprintf(stderr, "not enough command line parameters\n");
    exit(1);
}

答案 1 :(得分:5)

在C argv[0]中通常是调用程序的名称。您正在寻找argv[1]argv[2]

附注:

  • 在触摸argc
  • 之前,您应该先检查argv
  • 无法保证argv[0]包含程序名称,甚至包含明智的内容