1

我一直在尝试对我的代码进行错误检查,以确保给定的参数是有效文件。以下代码:

int main(int argc, char *argv[]){
    for(int i = 1, i <=argc, i++){
         FILE *fileIn = fopen(argv[i],"r");
         if(fileIn == NULL){
                fprintf(stderr,"The file %s doesn't exist.",fileIn);
         }
         else if (fileIn != NULL){
             do a bunch of stuff, including printing out values from a struct
         }

我遇到的问题是当我运行我的程序时,我得到这个作为输出:

The (null) file doesn't exist
Output from else if loop

所以基本上,它是说 fileIn 是 null 并且同时不是 null 。它正在正常读取文件并按应有的方式进行操作,但每次都会遇到错误。有没有办法将指针分配给 argv[i 或其他东西?这是怎么回事?

4

2 回答 2

5

代码循环了太多次。<= argc正在评估一个比实际存在的论点多的论点。它应该是:

for(int i = 1, i < argc, i++){

此外,不存在文件的 printf 应如下所示(它需要名称):

fprintf(stderr,"The file %s doesn't exist.",argv[i]);
于 2012-04-17T22:56:51.743 回答
4

改变不等式

for(int i = 1, i <=argc, i++){

for(int i = 1, i < argc, i++){

如果argc是 2,那么

argv[0] = 程序名
argv[1] = 第一个参数

此外,由于您正在检查if (fileIn == NULL),因此您无需再次检查;只需使用else.

于 2012-04-17T22:57:04.057 回答