Перенаправление файлов в программу

У меня проблемы с перенаправлением файлов в мою программу. У меня есть Makefile с именем test, и я хочу перенаправить в него текстовый файл в качестве входных данных. Например, я хочу сделать:

тестовое задание < file.txt

как вход в мой исполняемый файл. Тем не менее, я продолжаю получать ошибки сегментации, когда я пытаюсь прочитать содержимое файла file.txt. Вот моя попытка:

int main(int argc, char* argv[])
{
FILE *a;
int count;
a = fopen(argv[1], "r");
for(n = 0; ; n++)
{
count = fgetc(a); // <- here is where my program segfaults
if(feof(a))
break;
}
return 0;
}

Кто-нибудь может знать, почему это происходит?

1

Решение

Это потому, что перенаправление обрабатывается оболочкой и не передается в качестве аргумента. Когда используется перенаправление, файл используется для stdin,

Вы всегда должны проверять результат функции, в этом случае вы пытаетесь вызвать fopen с NULL как имя файла, так что он вернется NULL приводя к вашей ошибке сегментации.

1

Другие решения

Оболочка не проходит<«и» file.txt «в качестве аргументов программы, поэтому ваш argv[1] возвращает случайный мусор.

Вместо чтения из a, вы должны прочитать из stdin, который автоматически доступен и открыт.

int main(int argc, char* argv[])
{
int count;
for(n = 0; ; n++)
{
count = fgetc(stdin);
if(feof(stdin))
break;
}
return 0;
}
0

По вопросам рекламы [email protected]