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;
}