|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
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;
- }
复制代码
书上的代码 为这个函数建立了一个缓冲区。我试着把这个缓冲区删除了,程序一样还是可用的,想问这个缓冲区到底是用来做什么的,书上也没有详细说明,百度了半天也不知道…………
|
|