标准IO:采用fgetc和fputc,fgets和fputs实现文件的拷贝和获取文件的行数

fgetc函数:

fgetc函数是C语言标准库中的一个函数,用于从文件中读取一个字符。

函数原型:

int fgetc(FILE *stream);

参数说明:

  • stream:指向文件的指针,可通过fopen函数打开文件获取。

返回值:

  • 成功时,返回读取的字符的ASCII码值。
  • 若到达文件末尾或读取出错,则返回EOF。

示例用法:

#include <stdio.h>

int main() {
    FILE *file = fopen("example.txt", "r");
    if (file == NULL) {
        printf("Failed to open the file.\n");
        return 1;
    }
    
    int character;
    while ((character = fgetc(file)) != EOF) {
        printf("%c", character);
    }
    
    fclose(file);
    return 0;
}

上述代码打开名为"example.txt"的文件,然后使用fgetc函数逐个读取文件中的字符,并将其打印到控制台上,直到文件末尾。最后关闭文件。

fputc函数

fputc函数是C语言中的标准库函数之一,用来将一个字符写入到指定的文件中。

函数原型:int fputc(int c, FILE *stream);

参数:

  • c:要写入文件的字符
  • stream:要写入的文件指针

返回值:

  • 成功时,返回写入的字符的ASCII码值
  • 失败时,返回EOF(-1)

函数说明:

  • fputc函数将一个字符写入到指定的文件中,可以用来写入文本文件、二进制文件以及设备文件。
  • 如果写入成功,则返回写入的字符的ASCII码值;如果写入失败,则返回EOF。
  • 在Linux/Unix系统中,EOF的值为-1,在Windows系统中,EOF的值为EOF。

示例代码:

int c = fputc('A', file);
if (c == EOF) {
    printf("Failed to write character.\n");
    return -1;
}

fclose(file);

return 0;

上述代码创建了一个名为test.txt的文件,并将字符'A'写入到该文件中。如果成功写入,则返回字符'A'的ASCII码值,否则返回EOF。最后关闭文件。

注意事项:

  • 在使用fputc函数之前,需要先打开文件并获取到文件指针。
  • fputc函数是按字符级别写入的,如果需要写入字符串,可以使用fprintf函数。

1.fgetc和fputc拷贝文件 

#include <myhead.h>

int main(int argc, const char *argv[])
{
    //fgetc和fputc
    //将1.txt内容拷贝到2.txt中
    if(argc!=3)
    {
        printf("外部参数错误\n");    
        return -1;
    }
    FILE *fp1 = fopen("./1.txt","r");//只读方式打开文件1
    if(NULL==fp1)
    {
        perror("fp1");
        return -1;
    }
    FILE *fp2 = fopen("./2.txt","w");//只写清空方式打开文件2
    if(NULL==fp2)
    {
        perror("fp2");
        return -1;
    }
    while(1)
    {
        char buff = fgetc(fp1);
        if(buff==EOF)//读取到文件1末尾
        {
            break;//退出循环
        }
        fputc(buff,fp2);//放入文件2中
    }
    fclose(fp1);    
    fclose(fp2);
    printf("拷贝成功\n");
    
 fp2 = fopen("./2.txt","r");
    if(NULL==fp2)
    {
        perror("fp2");
        return -1;
    }
    while(1)//循环输出
    {
        char rev = fgetc(fp2);
        if(rev==EOF)
        {
            break;
        }
        fputc(rev,stdout);//输出读取到的单字符
    }
    fclose(fp2);
    return 0;
}

fgets函数

fgets函数是一个用于从标准输入或文件中读取字符串的函数。它的原型为:

char *fgets(char *str, int n, FILE *stream);

它接收三个参数:str是一个指向字符数组的指针,用于存储读取到的字符串;n是要读取的最大字符数;stream是一个指向FILE类型的指针,表示要从哪个流中读取。

fgets函数会从指定的流中读取字符,直到遇到换行符(包括换行符在内)或达到最大字符数限制为止,然后将读取到的字符存储在str指向的字符数组中。如果成功读取到字符,则返回指向str的指针;否则返回NULL。

fgets函数保证读取到的字符串以空字符'\0'结尾,并且会包括换行符。如果读取到的字符串长度小于n-1,则fgets函数会将剩余的字符填充为NULL字符,以保证存储的字符串总长度为n。

fgets函数在读取到换行符或达到最大字符数限制时会停止读取,即使后面还有字符未读取。如果需要读取整行字符并丢弃换行符,可以使用strtok函数将字符串分割成多个部分。

fgets函数与gets函数类似,但是相对更加安全。因为gets函数不会检查读取的字符数是否超出了字符数组的边界,可能导致缓冲区溢出的问题。而fgets函数可以指定最大字符数,避免了缓冲区溢出的风险。

fputs函数

fputs函数是用于向文件写入字符串的函数。

原型为:

int fputs(const char *str, FILE *stream)

该函数将字符串str写入到stream指定的文件中。函数返回值为非负值表示成功,返回EOF表示失败。 注意,fputs函数不会自动添加换行符,如果需要换行,需要手动在字符串后添加换行符。

 2.fgets和fputs拷贝文件

#include <myhead.h>
int main(int argc, const char *argv[])
{

	FILE *fp1,*fp2;
	fp1=fopen("./1.txt","r");
	if(fp1==NULL)
	{
		perror("fp1");
		return -1;
	}
	fp2=fopen("./2.txt","w");
	if(fp2==NULL)
	{
		perror("fp2");
		return -1;
	}

	char buff[100];
	printf("文本1内容:\n");
	while(fgets(buff,sizeof(buff),fp1) !=NULL)
	{
		printf("%s",buff);
		fputs(buff,fp2);
	}

	fclose(fp1);
	fclose(fp2);
	printf("拷贝成功\n");
	printf("文本2内容\n");
	char buff2[100];
	fp2=fopen("./2.txt","r");
	if(fp2==NULL)
	{
		perror("fp2");
		return -1;
	}
	while(fgets(buff2,sizeof(buff),fp2) !=NULL)
	{
		printf("%s",buff2);
		
	}


	return 0;
}

3.fgets获取文件的行号

#include <myhead.h>
int main(int argc, const char *argv[])
{

	FILE *fp;
	fp=fopen("./1.txt","r");
	if(fp==NULL)
	{
		perror("fp");
		return -1;
	}
	int k=0;
	int len=0;
	char buff[100];

	while(fgets(buff,sizeof(buff),fp) !=NULL)
	{
		len++;
	}
	printf("%d\n",len);
	fclose(fp);
	return 0;
}

  • 15
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值