2009-08-26 8 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

答えて

3

あなたが原因ARG_COUNT + 1の多数回に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; 
} 
関連する問題