outputF = fopen ( argv[argc] , "wb");
Argc обозначает arg count, который является числом элементов в массиве argv (вектор аргумента).Однако индексы в C основаны на нуле.Таким образом, если массив имеет длину из n элементов, индекс последнего элемента равен n - 1, а первый элемент - 0.
РЕДАКТИРОВАТЬ: @ Weather Vane , поэтому полезно указать на последнийэлемент в argv на самом деле является нулевым (нулевым) значением.Интерпретируется как char *, который, вероятно, является вашим segfault прямо здесь.Используйте gdb и printf, чтобы помочь вам отладить и выяснить, когда ваша программа вылетает хорошее введение в gdb
Условие if
if ( (argc < 4) && (argc > 13) )
Вообще говоря, следует проверить перед вамипопытка использовать argc.Подумайте, что если бы не было аргументов?Зачем проверять после использования.Также вы можете пересмотреть это условие.Когда он будет меньше 4 и больше 13. Возможно, вы намеревались использовать ИЛИ?
for(i=1; i<argc; i++)
Опять же, те же индексы проблем основаны на нулях.
xored_buffer[j] ^ FB[i].buffer[index]
Где вы фактически установили значение FB [i] .buffer [index]
Возможно, вы также захотите проверить, как на самом деле работает оператор sizeof
, читая и простой пример Имейте в виду, что массив с известным размером времени компиляции отличается от указателя, который может указывать на один или несколько элементов.