0

在尝试为 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]也许有什么问题?

4

2 回答 2

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);
}
于 2012-04-04T19:08:44.160 回答
5

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

作为旁注:

  • 你应该argc在触摸之前检查argv
  • 不能保证argv[0]包含程序的名称,甚至是有意义的东西
于 2012-04-04T19:08:35.257 回答