// добавляет содержимое текстового файла
// ошибка сегментирования, не могу понять почему.
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define BUFSIZE 1024
#define SLEN 81
void append(FILE *source, FILE *dest);
int main(void)
{
FILE *fa, *fs;
int files = 0;
char file_app[SLEN];
char file_src[SLEN];
puts ("Введите имя файла:"); if ((fa
= fopen(file_app
, "a")) == NULL
) {
fprintf(stderr
, "не удаётся открыть файл %s\n", file_app
); }
if (setvbuf(fa
, NULL
, _IOFBF
, BUFSIZE
) != 0) {
fputs("Не удаётся создать буфер вывода\n", stderr
); }
puts ("ВЫведите имя файла или пусто для выхода:\n"); while (gets(file_src
) && file_src
[0] != '\0') {
if (strcmp(file_src
, file_app
) == 0) fputs("Нельзя добавлять файл в конец самого себя\n", stderr
); else if ((fs
= fopen(file_src
, "r")) == NULL
) fprintf(stderr
, "Не удаётся открыть файл %s\n", file_src
); else
{
if (setvbuf(fs
, NULL
, _IOFBF
, BUFSIZE
) != 0) {
fputs("Не удаётся создать буфер ввода\n", stderr
); continue;
}
append (fs, fa);
fprintf(stderr
, "Ошибка во время чтения файла %s\n", file_src
); fprintf(stderr
, "Ошибка во время записи в файл %s\n", file_app
); files++;
printf("Файл %s добавлен.\nВведите другой файл или пусто для выхода:\n"); }
}
printf("Готово. Добавлено %d файлов.\n", files
); return 0;
}
void append(FILE *source, FILE *dest)
{
size_t bytes;
static char temp[BUFSIZE];
while ((bytes
= fread(temp
, sizeof(char), BUFSIZE
, source
)) > 0) fwrite(temp
, sizeof (char), bytes
, dest
); }
Ly8g0LTQvtCx0LDQstC70Y/QtdGCINGB0L7QtNC10YDQttC40LzQvtC1INGC0LXQutGB0YLQvtCy0L7Qs9C+INGE0LDQudC70LAKLy8g0L7RiNC40LHQutCwINGB0LXQs9C80LXQvdGC0LjRgNC+0LLQsNC90LjRjywg0L3QtSDQvNC+0LPRgyDQv9C+0L3Rj9GC0Ywg0L/QvtGH0LXQvNGDLgojaW5jbHVkZSA8c3RkaW8uaD4KI2luY2x1ZGUgPHN0ZGxpYi5oPgojaW5jbHVkZSA8c3RyaW5nLmg+CiNkZWZpbmUgQlVGU0laRSAxMDI0CiNkZWZpbmUgU0xFTiA4MQp2b2lkIGFwcGVuZChGSUxFICpzb3VyY2UsIEZJTEUgKmRlc3QpOwoKaW50IG1haW4odm9pZCkKewoJRklMRSAqZmEsICpmczsKCWludCBmaWxlcyA9IDA7CgljaGFyIGZpbGVfYXBwW1NMRU5dOwoJY2hhciBmaWxlX3NyY1tTTEVOXTsKCQoJcHV0cyAoItCS0LLQtdC00LjRgtC1INC40LzRjyDRhNCw0LnQu9CwOiIpOwoJZ2V0cyhmaWxlX2FwcCk7CglpZiAoKGZhID0gZm9wZW4oZmlsZV9hcHAsICJhIikpID09IE5VTEwpCgl7CgkJZnByaW50ZihzdGRlcnIsICLQvdC1INGD0LTQsNGR0YLRgdGPINC+0YLQutGA0YvRgtGMINGE0LDQudC7ICVzXG4iLCBmaWxlX2FwcCk7CgkJZXhpdCgyKTsKCX0KCQoJaWYgKHNldHZidWYoZmEsIE5VTEwsIF9JT0ZCRiwgQlVGU0laRSkgIT0gMCkKCXsKCQlmcHV0cygi0J3QtSDRg9C00LDRkdGC0YHRjyDRgdC+0LfQtNCw0YLRjCDQsdGD0YTQtdGAINCy0YvQstC+0LTQsFxuIiwgc3RkZXJyKTsKCQlleGl0KDMpOwoJfQoJCglwdXRzICgi0JLQq9Cy0LXQtNC40YLQtSDQuNC80Y8g0YTQsNC50LvQsCDQuNC70Lgg0L/Rg9GB0YLQviDQtNC70Y8g0LLRi9GF0L7QtNCwOlxuIik7Cgl3aGlsZSAoZ2V0cyhmaWxlX3NyYykgJiYgZmlsZV9zcmNbMF0gIT0gJ1wwJykKCXsKCQlpZiAoc3RyY21wKGZpbGVfc3JjLCBmaWxlX2FwcCkgPT0gMCkKCQkJZnB1dHMoItCd0LXQu9GM0LfRjyDQtNC+0LHQsNCy0LvRj9GC0Ywg0YTQsNC50Lsg0LIg0LrQvtC90LXRhiDRgdCw0LzQvtCz0L4g0YHQtdCx0Y9cbiIsIHN0ZGVycik7CgkJZWxzZSBpZiAoKGZzID0gZm9wZW4oZmlsZV9zcmMsICJyIikpID09IE5VTEwpCgkJCWZwcmludGYoc3RkZXJyLCAi0J3QtSDRg9C00LDRkdGC0YHRjyDQvtGC0LrRgNGL0YLRjCDRhNCw0LnQuyAlc1xuIiwgZmlsZV9zcmMpOwoJCWVsc2UKCQl7CgkJCWlmIChzZXR2YnVmKGZzLCBOVUxMLCBfSU9GQkYsIEJVRlNJWkUpICE9IDApCgkJCXsKCQkJCWZwdXRzKCLQndC1INGD0LTQsNGR0YLRgdGPINGB0L7Qt9C00LDRgtGMINCx0YPRhNC10YAg0LLQstC+0LTQsFxuIiwgc3RkZXJyKTsKCQkJCWNvbnRpbnVlOwoJCQl9CgkJCWFwcGVuZCAoZnMsIGZhKTsKCQkJCgkJCWlmIChmZXJyb3IoZnMpICE9IDApCgkJCQlmcHJpbnRmKHN0ZGVyciwgItCe0YjQuNCx0LrQsCDQstC+INCy0YDQtdC80Y8g0YfRgtC10L3QuNGPINGE0LDQudC70LAgJXNcbiIsIGZpbGVfc3JjKTsKCQkJaWYgKGZlcnJvcihmYSkgIT0gMCkKCQkJCWZwcmludGYoc3RkZXJyLCAi0J7RiNC40LHQutCwINCy0L4g0LLRgNC10LzRjyDQt9Cw0L/QuNGB0Lgg0LIg0YTQsNC50LsgJXNcbiIsIGZpbGVfYXBwKTsKCQkJZmNsb3NlKGZzKTsKCQkJZmlsZXMrKzsKCQkJcHJpbnRmKCLQpNCw0LnQuyAlcyDQtNC+0LHQsNCy0LvQtdC9Llxu0JLQstC10LTQuNGC0LUg0LTRgNGD0LPQvtC5INGE0LDQudC7INC40LvQuCDQv9GD0YHRgtC+INC00LvRjyDQstGL0YXQvtC00LA6XG4iKTsKCQl9Cgl9CgkKCXByaW50Zigi0JPQvtGC0L7QstC+LiDQlNC+0LHQsNCy0LvQtdC90L4gJWQg0YTQsNC50LvQvtCyLlxuIiwgZmlsZXMpOwoJZmNsb3NlKGZhKTsKCXJldHVybiAwOwp9Cgp2b2lkIGFwcGVuZChGSUxFICpzb3VyY2UsIEZJTEUgKmRlc3QpCnsKCXNpemVfdCBieXRlczsKCXN0YXRpYyBjaGFyIHRlbXBbQlVGU0laRV07Cgl3aGlsZSAoKGJ5dGVzID0gZnJlYWQodGVtcCwgc2l6ZW9mKGNoYXIpLCBCVUZTSVpFLCBzb3VyY2UpKSA+IDApCgkJZndyaXRlKHRlbXAsIHNpemVvZiAoY2hhciksIGJ5dGVzLCBkZXN0KTsKfQo=