| 
 | 
 
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册  
 
x
 
- #include<stdio.h>
 
 - #include<stdlib.h>
 
 - #include<string.h>
 
 - #define BUFSIZE 4096
 
 - #define SLEN 81
 
 - void append(FILE *source, FILE *dest);
 
 - char * s_gets(char *st, int n);
 
 - int main(void)
 
 - {
 
 -         FILE *fa, *fs;
 
 -         int files = 0;
 
 -         char file_app[SLEN];       //目标文件数组
 
 -         char file_src[SLEN];        //源文件数组
 
 -         int ch;
 
 -         puts("输入你的目标文件的名字");
 
 -         s_gets(file_app, SLEN);
 
 -         if ((fopen_s(&fa, file_app, "a+")) != 0)
 
 -         {
 
 -                 fprintf(stderr, "不可以打开%s这个文件", file_app);
 
 -                 exit(EXIT_FAILURE);
 
 -         }
 
 -         if ((setvbuf(fa, NULL, _IOFBF, BUFSIZE)) != 0)
 
 -         {
 
 -                 fputs( "没办法创建这个缓冲区\n", stderr);
 
 -                 exit(EXIT_FAILURE);
 
 -         }
 
 -         puts("输入你的源文件的名字(空行退出)");
 
 -         while ((s_gets(file_src, SLEN)) && file_src[0] != '\0')
 
 -         {
 
 -                 if (strcmp(file_src, file_app) == 0)
 
 -                         fputs("这2个文件一样,没办法\n", stderr);
 
 -                 else if (fopen_s(&fs, file_src, "r") != 0)
 
 -                         fprintf(stderr, "不可以打开%s这个文件", file_src);
 
 -                 else
 
 -                 {
 
 -                         if ((setvbuf(fs, NULL, _IOFBF, BUFSIZE)) != 0)
 
 -                         {
 
 -                                 fputs("不可以创建这个缓冲区", stderr);
 
 -                                 continue;
 
 -                         }
 
 -                         append(fs, fa);
 
 -                         if (ferror(fs) != 0)
 
 -                                 fprintf(stderr, "读取失败%s\n", file_src);
 
 -                         if (ferror(fa) != 0)
 
 -                                 fprintf(stderr, "读取失败%s\n", file_app);
 
 -                         fclose(fs);
 
 -                         files++;
 
 -                         printf("文件%s被附加了", file_src);
 
 -                         puts("请输入下个文件,空行退出");
 
 -                 }
 
 -         }
 
 -         printf("不添加了吗?已经添加了%d个文件进去", files);
 
 -         rewind(fa);
 
 -         printf("%s  \n", file_app);
 
 -         while ((ch = getc(fa)) != EOF)
 
 -                 putchar(ch);
 
 -         fclose(fa);
 
 -         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);
 
 - }
 
 - char * s_gets(char *st, int n)
 
 - {
 
 -         char *ret_val;
 
 -         char *find;
 
 -         ret_val = fgets(st, n, stdin);
 
 -         if (ret_val)
 
 -         {
 
 -                 find = strchr(st, '\n');
 
 -                 if (find)
 
 -                         *find = '\0';
 
 -                 else
 
 -                         while (getchar() != '\n')
 
 -                                 continue;
 
  
-         }
 
 -         return ret_val;
 
  
- }
 
  复制代码 
 
 
 
书上的代码 为这个函数建立了一个缓冲区。我试着把这个缓冲区删除了,程序一样还是可用的,想问这个缓冲区到底是用来做什么的,书上也没有详细说明,百度了半天也不知道………… 
 |   
 
 
 
 |