Передача имени файла из командной строки для чтения содержимого файла - PullRequest
0 голосов
/ 16 сентября 2018

У меня есть функция ./transform, которая должна принимать два аргумента командной строки для файла ввода и вывода.

Примерно так: ./transform "inputfile" "outputfile"

Затем я пытаюсь прочитатьфайл использует fopen для хранения каждого символа в файле в массив символов char token[1024].Общее количество символов во входном файле всегда будет <= 1024. </p>

Я получаю сообщения об ошибках fopen, не имеющих нужного количества аргументов.Вот псевдокод того, что я пытаюсь выполнить.

void main(FILE *inputFile, FILE *outputFile){
    char token[1024];
    token = fopen(&inputFile, "r");
}

Да, я знаю, что пытаюсь присвоить значение FILE значению Char ... Я написал это таким образом, чтобы показать, чтоЯ хочу, чтобы каждый символ из inputFile сохранялся в массиве символов.Я не уверен, как это сделать правильно.После выполнения кода программы (преобразования значений hex и int из файла в ASCII) мне необходимо сохранить преобразованный текст ASCII в определяемый пользователем выходной файл.

1 Ответ

0 голосов
/ 16 сентября 2018

Есть несколько проблем с кодом, который вы пробовали, во-первых здесь

void main(FILE *inputFile, FILE *outputFile){ }

вы пытаетесь изменить прототип main(), что неверно. Согласно C Стандарт Раздел 5.1.2.2.1 Запуск программы , либо должно быть

int main(void) { /* ... */ }

или

int main(int argc, char *argv[]) { /* ... */ }

Так сделайте это как

int main(int argc, char *argv[]) {
    /*some_code */
}

Далее, чтобы открыть файл с помощью fopen() из командной строки, это

token = fopen(&inputFile, "r");

совершенно неверно, поскольку fopen() возвращает аргумент FILE*, а не char* и аргумент, который вы указали fopen(), также неверен. Прочтите страницу руководства fopen () , там написано

FILE *fopen(const char *path, const char *mode);

Пример кода

int main(int argc, char *argv[]) {
  if( argc!= 3 ) { /*if user input is not correct, inform user */
     printf("./transform inputfile outputfile \n");
     return 0;
  }
  FILE *fp = fopen(argv[1],"r); 
  if(fp == NULL) {
     /* error handling */
     return 0;
  }
  /* do_stuff_with_fp */  
}
...