一、函数
int fgetc(FILE *stream);
功能:读取接下来的一个字符
参数:文件指针
返回:读取到的字符的ASCII码,读到文件末尾或失败EOF(-1)
int fputc(int c, FILE *stream);
功能:向stream文件写一个字符c
返回:成功返回写入字符的ASCII码,失败返回EOF(-1)
二、测试源码
//使用fgetc、fputc完成文件的拷贝操作
#include <stdio.h>
int main(int argc, const char *argv[])
{
if(argc < 3)
{
printf("Usage : %s <src_file> <dst_file>\n", argv[0]);
return -1;
}
FILE *fp_r = fopen(argv[1], "r");
if(fp_r == NULL)
{
printf("fp_r fopen error\n");
return -1;
}
FILE *fp_w = fopen(argv[2], "w");
if(fp_w == NULL)
{
printf("fp_w fopen error\n");
return -1;
}
int ret = 0;
while((ret = fgetc(fp_r)) != EOF)
{
fputc(ret, fp_w);
}
printf("copy ok\n");
fclose(fp_r);
fclose(fp_w);
return 0;
}
三、测试结果
四、关键代码分析
while((ret = fgetc(fp_r)) != EOF)
{
fputc(ret, fp_w);
}
当没有读到文件的末尾,使用fputc函数将读取的一个ASCII码写入到要拷贝的文件中,直到读到文件的末尾,文件的拷贝结束。
#define _CRT_SECURE_NO_WARNINGS
#include <stdlib.h>
#include <string.h>
#include <stdio.h>
int my_fputc(void)
{
int i = 0;
FILE *fp = NULL;
char *filename = "./demo.txt";
char a[27]= "abcdefghijklmn";
fp = fopen(filename, "w+");
if (fp == NULL)
{
printf("func fopen() err \n");
return -1;
}
printf("打开成功\n");
for (i=0; i<strlen(a); i++)
{
fputc(a[i], fp);
}
fclose(fp);
return 0;
}
int my_fgetc(void)
{
int i = 0;
FILE *fp = NULL;
char *filename = "./demo.txt";
char tempc;
fp = fopen(filename, "r");
if (fp == NULL)
{
printf("func fopen() err \n");
return -1;
}
printf("打开成功\n");
while ((tempc = fgetc(fp)) != EOF)
{
printf("%c", tempc);
}
if (fp != NULL)
{
fclose(fp);
}
return 0;
}
int main(int argc, const char * argv [])
{
my_fputc();
my_fgetc();
return 0;
}