2009-08-26 87 views
0

这是打开并打印文件内容的简单代码。打开并打印C代码中的文件内容后为NULL

#include <stdio.h> 
#include <stdlib.h> 

int main (int arg_count, char *arg_vec[]) { 
    int ch; 
    FILE * fp; 
    int i; 

    if (arg_count <2) { 
     printf("Usage: %s filename\n", arg_vec[0]); 
     exit(1); 
    } 

    if ((fp = fopen(arg_vec[1], "r")) == NULL) { // can't open file 

     printf("Can't open %s \n", arg_vec[1]); 
     exit(1); 
    } 

    for (i = 1; i <(arg_count+1); i++) { 
     printf("%s \n\n", arg_vec[i]); // print file name 

     while ((ch = getc(fp)) != EOF) { 
      putc(ch,stdout); // print content 
     } 
    } 

    fclose(fp); 

    return 0; 
} 

但为什么它给(空)在它的结束的输出打印:

Filename.txt 

text 
text 
(null) 
+3

(arg_count + 1)是罪魁祸首。顺便说一句,argv []中的最后一个成员始终为NULL。 – Inshallah 2009-08-26 03:21:10

回答

3

你一个循环,因为ARG_COUNT + 1的许多倍。 null是因为您试图打印参数列表中不存在的文件名。您还需要打开并关闭列表中的每个文件。

 
#include <stdio.h> 
#include <stdlib.h> 

int main (int arg_count, char *arg_vec[]) { 
    int ch; 
    FILE * fp; 
    int i; 

    if (arg_count < 2) { 
     printf("Usage: %s filename\n", arg_vec[0]); 
     exit(1); 
    } 

    for (i = 1; i < arg_count; i++) { 
     printf("File: %s \n\n", arg_vec[i]); // print file name 
     if ((fp = fopen(arg_vec[i], "r")) == NULL) { // can't open file 
      printf("Can't open %s \n", arg_vec[i]); 
      exit(1); 
     } 

     while ((ch = getc(fp)) != EOF) { 
      putc(ch,stdout); // print content 
     } 
     fclose(fp); 
    } 

    return 0; 
}