前言
面向字符操作。
这两个函数类似于getchar()和puchar(‘ch’)。
区别
在后面加多一个参数(FILE指针)
函数
fopen()
- 函数声明:在stdio.h中
- 参数
(文件名,读写等模式)
- 返回:文件指针
FILE * fp;
文件指针并不指向实际的文件,它指向一个包含文件信息的数据对象,其中包含I/O函数所用的缓冲区信息。
getc()
类似于getchar()
- 参数
(FILE指针)
- 返回:文件中的一个字符
与getchar()函数类似,getchar()是从标准输入中获取字符。而,getc()是从指定文件中获取字符
putc()
类似于putchar()
- 参数
(一个字符,FILE指针)
- 作用
将这个字符放入指定的文件中
exit()
- 函数声明:在stdlib.h头文件中
- 参数
正常结束传递0,非正常传递非0值.
- 作用
关闭所有打开文件,并结束程序
与return 不同的是:在main()以外的函数中调用exit()也能结束整个程序
fclose()
- 参数
FILE指针
- 作用
关闭指定文件
- 返回
成功关闭:0
不成功:EOF
示例
将文件copy到其他文件1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37
| #include<stdio.h> #include<stdlib.h> int main(int argc, char*argv[]) { FILE *in; FILE *out; int ch; int count = 0;
if (argc != 3) { printf("Usage: %s filename", argv[0]); exit(EXIT_FAILURE); } if ((in = fopen(argv[1], "r")) == NULL) { printf("Can't open %s", argv[1]); exit(EXIT_FAILURE); } if ((out = fopen(argv[2], "w+")) == NULL) { printf("Can't open %s", argv[2]); exit(EXIT_FAILURE); } while((ch = getc(in)) != EOF) { putc(ch, out); count++; } if (fclose(in) != 0); printf("Error in closing file %s\n", argv[1]);
printf("File %s has %lu characters\n", argv[1], count);
return 0; }
|
转换为大写文件1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55
| #include <stdio.h> #include <ctype.h> #include <string.h> #define SIZE 40 char * s_gets(char * st, int n);
int main(void) { FILE * fs; FILE * ft; char name_s[SIZE]; char name_t[SIZE]; char ch; fprintf(stdout, "Please enter the source file name:\n"); s_gets(name_s, SIZE); fprintf(stdout, "Please enter the target file name:\n"); s_gets(name_t, SIZE); if ((fs = fopen(name_s, "r")) == NULL) fprintf(stderr, "Could not open the %s\n", name_s); if ((ft = fopen(name_t, "w")) == NULL) fprintf(stderr, "Could not open the %s\n", name_t); while ((ch = getc(fs)) != EOF) putc(toupper(ch), ft); fclose(fs); fclose(ft);
return 0; }
char * s_gets(char * st, int n) { char * find; char * ret_val;
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; }
|
输出文件内容(命令行)1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29
| #include<stdio.h> #include<stdlib.h> int main(int argc, char * argv[]) { FILE *fp; int i; char ch; if(argc == 1) { fprintf(stderr, "Usage: %s filename", argv[0]); exit(EXIT_FAILURE); }
for (i = 1; i < argc; i++) { if((fp = fopen(argv[i], "r")) == NULL) { fprintf(stderr, "Cound not open %s file", argv[i]); exit(EXIT_FAILURE); } while ((ch = getc(fp)) != EOF) { putc(ch, stdout); } printf("\n"); } return 0; }
|