NULL после открытия и печати содержимого файла в коде C - PullRequest
0 голосов
/ 26 августа 2009

Это простой код, который открывает и печатает содержимое файла.

#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)

1 Ответ

3 голосов
/ 26 августа 2009

Вы повторяете один-много раз из-за 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;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...