C программа, которая считывает файл, введенный пользователем, и возвращает первую строку

#c

Вопрос:

 #include <stdio.h>
int main (int argc, char **argv)
  {
    FILE* file;
    char scratch[1024];
    char filename[1024] = argv[1];
    file = fopen( filename, "r" );
    if( file != NULL ){  
        if( fgets( scratch, 1024, file ) != NULL ){    
            fprintf( stdout, "read line: %s", scratch );  
        }  
        fclose(file);
    return 0;
  }
}
 

По сути, если пользователь должен был запустить
./nameoftheprograme nameOfTheTextFile,
он должен вернуть первую строку текстового файла

Я получаю следующую ошибку: ошибка: недопустимое имя файла символа инициализатора[1024] = argv[1];

Комментарии:

1. Это не ответ, но почему бы вам не использовать argv[1] напрямую?

2. Вы не можете инициализировать массивы символов с помощью нелитеральных строк. Если вы хотите сохранить ссылку на аргумент, просто используйте const char* filename = argv[1]; . Если вам нужно скопировать его в массив, используйте strncpy .

3. Я хочу, чтобы пользователь мог вводить любой файл, а не просто жестко кодировать имя argv[1] в проблему, чтобы он всегда запускал первый подобный файл.

Ответ №1:

 #include <stdio.h>
#include <stdlib.h>
int main(int argc, char **argv)
{
     ... your variables
     char *filename;

     if (argc>1)
     {
         filename = argv[1];
     }
     else
     {
         fprintf(stderr, "need a filenamen");
         exit(1);
     }

     ... your code
     return 0;
}
 

Комментарии:

1. Это здорово, спасибо!