Итак, я написал небольшую программу для обновления моих дотфайлов в другом каталоге с репозиторием git. Я просто хотел продолжить практику программирования на C.C программа для резервного копирования файлов точек
Программа является грубым нарушением принципа DRY и не работает. Вот код:
#include <stdio.h>
int main(void)
{
FILE *files_from[7];
files_from[0] = fopen(".vimrc", "r");
files_from[1] = fopen(".profile", "r");
files_from[2] = fopen(".tmux_conf", "r");
files_from[3] = fopen(".zshrc", "r");
files_from[4] = fopen(".bashrc", "r");
files_from[5] = fopen(".bash_aliases", "r");
files_from[6] = fopen(".gitconfig", "r");
FILE *files_to[7];
files_to[0] = fopen("dotFiles/.vimrc", "w");
files_to[1] = fopen("dotFiles/.profile", "w");
files_to[2] = fopen("dotFiles/.tmux.conf", "w");
files_to[3] = fopen("dotFiles/.zshrc", "w");
files_to[4] = fopen("dotFiles/.bashrc", "w");
files_to[5] = fopen("dotFiles/.bash_aliases", "w");
files_to[6] = fopen("dotFiles/.gitconfig", "w");
for(int i = 0; i < 7; ++i)
{
int character;
while((character = fgetc(files_from[i])) != EOF)
{
fputc(character, files_to[i]);
}
}
}
Почему я получаю ошибку сегментации?! (Также в любом случае держать его сухим?)
EDIT: С вами все в порядке. Один из них был NULL. Я просто добавил оператор if перед циклом while, чтобы проверить, является ли текущий файл из любого массива NULL.
ТЕПЕРЬ Как я могу сделать это СУХОЙ?
Запуск в отладчике, чтобы поймать сбой в действии. –
вы не проверяете, являются ли files_from [i] или files_to [i] NULL перед их использованием. Может быть, один из них NULL, и он падает при доступе к нему. – phoenix
Это может быть NULL, если есть некоторая ошибка при открытии файла – phoenix