2012-04-04 78 views
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]有问题?

+0

是。 argv [0]通常指编译的二进制myprog,并且从不包含第一个命令行参数。 – 2012-04-04 19:08:24

+0

'strcmp(argv [1],“FCFS”)!= 0' - 根据你的代码的其余部分应该是'strcmp(argv [1],“FCFS”)== 0'。由于如果字符串匹配,'strcmp'返回0 – valdo 2012-04-04 19:11:00

回答

7

在C的名字之前, argv[0]程序的名称(或者更准确地说,第一个字t他在命令行输入用户名来运行程序,如果从shell运行的话)。

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

这将是明确的,如果你用了一个调试器,通过程序来跟踪,或只是打印的价值,你使用它之前:

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

这也是一个好主意,检查是否有足够的命令行参数通过访问argv前验证argc: “的任何错误的argv [0]也许”

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

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

由于旁注:

  • 你应该检查argc触摸argv
  • 没有保证argv[0]包含程序甚至一些明智的
相关问题