fork download
  1. // добавляет содержимое текстового файла
  2. // ошибка сегментирования, не могу понять почему.
  3. #include <stdio.h>
  4. #include <stdlib.h>
  5. #include <string.h>
  6. #define BUFSIZE 1024
  7. #define SLEN 81
  8. void append(FILE *source, FILE *dest);
  9.  
  10. int main(void)
  11. {
  12. FILE *fa, *fs;
  13. int files = 0;
  14. char file_app[SLEN];
  15. char file_src[SLEN];
  16.  
  17. puts ("Введите имя файла:");
  18. gets(file_app);
  19. if ((fa = fopen(file_app, "a")) == NULL)
  20. {
  21. fprintf(stderr, "не удаётся открыть файл %s\n", file_app);
  22. exit(2);
  23. }
  24.  
  25. if (setvbuf(fa, NULL, _IOFBF, BUFSIZE) != 0)
  26. {
  27. fputs("Не удаётся создать буфер вывода\n", stderr);
  28. exit(3);
  29. }
  30.  
  31. puts ("ВЫведите имя файла или пусто для выхода:\n");
  32. while (gets(file_src) && file_src[0] != '\0')
  33. {
  34. if (strcmp(file_src, file_app) == 0)
  35. fputs("Нельзя добавлять файл в конец самого себя\n", stderr);
  36. else if ((fs = fopen(file_src, "r")) == NULL)
  37. fprintf(stderr, "Не удаётся открыть файл %s\n", file_src);
  38. else
  39. {
  40. if (setvbuf(fs, NULL, _IOFBF, BUFSIZE) != 0)
  41. {
  42. fputs("Не удаётся создать буфер ввода\n", stderr);
  43. continue;
  44. }
  45. append (fs, fa);
  46.  
  47. if (ferror(fs) != 0)
  48. fprintf(stderr, "Ошибка во время чтения файла %s\n", file_src);
  49. if (ferror(fa) != 0)
  50. fprintf(stderr, "Ошибка во время записи в файл %s\n", file_app);
  51. fclose(fs);
  52. files++;
  53. printf("Файл %s добавлен.\nВведите другой файл или пусто для выхода:\n");
  54. }
  55. }
  56.  
  57. printf("Готово. Добавлено %d файлов.\n", files);
  58. fclose(fa);
  59. return 0;
  60. }
  61.  
  62. void append(FILE *source, FILE *dest)
  63. {
  64. size_t bytes;
  65. static char temp[BUFSIZE];
  66. while ((bytes = fread(temp, sizeof(char), BUFSIZE, source)) > 0)
  67. fwrite(temp, sizeof (char), bytes, dest);
  68. }
  69.  
Runtime error #stdin #stdout 0s 4300KB
stdin
Standard input is empty
stdout
Введите имя файла: