C - передать входной и выходной текстовый файл через командную строку в мою программу - PullRequest
0 голосов
/ 20 декабря 2018

Мне нужно передать два файла через мою программу в форме командной строки

./your_executable inputfile.txt outputfile.txt

В моем примере я использую

gcc coursework.c CircleCode.txt CircleCode_tmp.txt

Поэтому второй файл не существуети открывается в программе.

int main(int argc, char **argv[])
{
    FILE *orginalFile = fopen(*argv[1], "r");
    FILE *newFile = fopen(*argv[2], "w");

    if (orginalFile == NULL || newFile == NULL)
    {
        printf("Cannot open file");
        exit(0);
    }
}

Ошибка в Clang :

error: no such file or directory: 'CircleCode_tmp.txt'

Ответы [ 2 ]

0 голосов
/ 20 декабря 2018

Тип argv является символом **, не нужно []

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

int main(int argc, char** argv) {
    FILE* orginalFile = fopen(argv[1], "r");
    FILE* newFile = fopen(argv[2], "w");

    if (orginalFile == NULL || newFile == NULL) {
      printf("Cannot open file");
      exit(0);
    }
}
0 голосов
/ 20 декабря 2018

Подпись вашего main() неверна.

Может измениться на

int main(int argc, char *argv[])                                       

или

int main(int argc, char **argv)                                        

, поскольку argv означаетуказать на массив строк.

См. этот пост .


Поскольку для работы вашей программы необходимы входные и выходные файлы, вам следует проверить, получено ли необходимое количество аргументов или нет.

argc будет иметь количество аргументов.Поскольку имя команды, используемой для запуска самой программы, считается как аргумент, наряду с двумя файлами, программе необходимо как минимум 3 аргумента.

Так что вы можете сделать что-то вроде

if(argc<3)
{                                                                        
   perror("Not enough arguments.");                                       
   return 1;                                                              
} 

Кроме того, с помощью

gcc coursework.c CircleCode.txt CircleCode_tmp.txt  

вы также просите компилятор компилировать ваши входные и выходные текстовые файлы, что, вероятно, не то, что вам нужно.

Вместо этого выможет сделать

gcc -Wall coursework.c -o your_executable

, чтобы скомпилировать программу, а затем запустить ее, как

./your_executable CircleCode.txt CircleCode_tmp.txt

Опция -Wall gcc используется для включения некоторых предупреждений, которые могут помочь вам лучше определитьи исправьте ошибки.

См. также это обсуждение.

...