我有一个基于 char **argv 命令行参数打开文件的程序。这是逻辑:
char * openErrorString = "Error opening file: ";
FILE *fp1 = fopen(*++argv, "r");
if (fp1 == NULL) {
perror(openErrorString);
return 1;
}
FILE *fp2 = fopen(*++argv, "r");
if (fp2 == NULL) {
perror(openErrorString);
return 1;
}
问题是,我稍后想比较这两个文件并在文件中的行不匹配时给出有意义的输出。这是我为此编写的代码:
while (fgets(fp1Line, max, fp1) != NULL &&
fgets(fp2Line, max, fp2) != NULL) {
if (strcmp(fp1Line, fp2Line)) {
printf("%s\n","Line discrepancy found:");
printf("%s: %s\n", argv[1], fp1Line);
printf("%s: %s\n", argv[2], fp2Line);
fclose(fp1);
fclose(fp2);
return 0;
}
}
但是,当我调用argv[1]
我的printf
语句时,我得到 (null),即 argv 中的最后一个条目。当我打电话时argv[2]
,我得到了TERM_PROGRAM=Apple_Terminal
。我不知道那是什么。似乎正在发生的事情是因为我在访问它以打开文件时将 argv 指针增加了两次,所以 argv 现在从第二个命令行参数开始。*argv--
除了在打开文件后执行两行之外,是否有一种重置此行为的好方法?