在尝试为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 :(得分: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]
包含程序名称,甚至包含明智的内容