Разрезать текстовый файл на части по N строк и символу

запуск через кмд

./programma input.txt out.txt log.txt q 3

input.txt - входной текстовик, out.txt - текстовик, в котором будет написан результат, log.txt - просто логи, q - символ, до и после которого программа должна "разрезать" строки, 3 - число разрезов. пусть в input.txt будет строка qwertyqmoqklqqq, символ - q, а число разрезов - 3, тогда результат должен быть

q

werty

q

mo

q

klqqq

Вот мой код, подскажите, в чем ошибка, и как исправить на рабочее

 char* symbol=argv[4], syb;
    char* num=argv[5], N;
    char* filename = argv[1], c;
    FILE* input = fopen(filename, "r+");
    for(i = 1; i <= N; i++)
      {
          while((c = tolower (fgetc(input)) != EOF))
          {
            if(c == syb)
            {
              putchar(c);
              printf("\n");
            }
          }
       }

Ответы (1 шт):

Автор решения: Stanislav Volodarskiy

Вот что говорит компилятор:

$ gcc -std=c11 -pedantic -Wall -Wextra -Werror -O temp.c 
temp.c: In function ‘main’:
temp.c:9:11: error: unused variable ‘num’ [-Werror=unused-variable]
    9 |     char* num=argv[5], N;
      |           ^~~
temp.c:8:11: error: unused variable ‘symbol’ [-Werror=unused-variable]
    8 |     char* symbol=argv[4], syb;
      |           ^~~~~~
temp.c:13:18: error: ‘N’ is used uninitialized in this function [-Werror=uninitialized]
   13 |     for(i = 1; i <= N; i++)
      |                ~~^~~~
temp.c:17:15: error: ‘syb’ may be used uninitialized in this function [-Werror=maybe-uninitialized]
   17 |             if(c == syb)
      |               ^
cc1: all warnings being treated as errors

В переводе на человеческий:

  • переменные num и symbol не используются;
  • для переменных N и syb не заданы значения.

То есть, программа не пользуется последними двумя параметрами командной строки.

P.S. Хорошие вопросы начинаются когда компилятор перестаёт выдавать ошибки.

→ Ссылка