fgets是C语言标准库中用于从文件中读取字符串的函数。
fgets
函数从指定的文件流stream
中读取最多n-1
个字符,或者直到遇到换行符(包括换行符在内),并将其存储到以str
指向的字符数组中。读取的字符串会以null字符\0
结尾,因此fgets
可以安全地读取包含空格的字符串。
如果成功读取了字符串,则fgets
返回str
;如果到达文件末尾或者发生错误,它会返回NULL
。
例如,可以使用fgets
函数从文件中逐行读取文本数据,并将每行存储到相应的字符数组中。
char *fgets(char *str, int n, FILE *stream);
我们打开一个名为date.txt
的文件,并使用fgets
函数从中读取一行数据,然后将其打印到控制台上。fgets
函数的第一个参数是目标缓冲区,第二个参数是要读取的最大字符数,第三个参数是文件指针。如果读取成功,fgets
会返回一个非空指针,否则返回空指针。
#define _CRT_SECURE_NO_WARNINGS
//fgets
#include<stdio.h>
int main()
{
FILE* file;
char buffer[100];//创建一个存储字符串的数组
//打开文件
file = fopen("date.txt", "r");
if (file == NULL)
{
printf("无法打开文件\n");
return 1;
}
//从文件中读取一行数据
if (fgets(buffer, 100, file) != NULL)
{
printf("从文件中读取的内容是:%s", buffer);
}
else
{
printf("读取文件失败\n");
}
//关闭文件
fclose(file);
return 0;
}
我已经创建好了名为date.txt的文件名,并且写入了如下图的数据。?
运行结果:?
fputs
是C语言标准库中用于向文件中写入字符串的函数。
fputs
函数将以str
指向的字符串写入到指定的文件流stream
中。如果写入成功,fputs
返回非负值;如果发生错误,它返回EOF
。
与fprintf
和fwrite
等函数不同,fputs
专门用于向文件中写入字符串,而不是格式化的数据或二进制数据。
例如,可以使用fputs
函数将一个字符串写入到文件中,或者将一个字符串逐行写入到文件中。
int fputs(const char *str, FILE *stream);
示例中,我将date.txt中的数据拷入到date_copy.txt的文件中去。
#include<stdio.h>
int main()
{
//声明两个指针变量,一个是源文件,一个是目标文件
FILE* source_file, *target_file;
char ch;
//以只读的方式打开源文件date.txt
source_file = fopen("date.txt", "r");
if (source_file == NULL)
{
printf("无法打开源文件\n");
return 1;
}
//以只写的方式打开目标文件date_copy.txt
target_file = fopen("date_copy.txt", "w");
if (target_file == NULL)
{
printf("无法打开目标文件\n");
fclose(source_file);
return 1;
}
//从源文件中读取数据,写入到目标文件中
while ((ch = fgetc(source_file)) != EOF)
{
fputc(ch, target_file);
}
//关闭文件
fclose(source_file);
fclose(target_file);
printf("文件拷贝完成\n");
return 0;
}
运行结果:
fscanf
是C语言标准库中用于从文件中按照指定格式读取数据的函数。
fscanf
函数从指定的文件流stream
中按照指定的格式字符串format
读取数据,并将读取到的数据按照格式转换后存储到对应的变量中。fscanf
函数的使用方式与scanf
函数类似,只是scanf
是从标准输入中读取数据,而fscanf
是从文件中读取数据。
fscanf
函数返回成功匹配并转换的参数个数,如果没有匹配成功,则返回0。如果发生读取错误或者到达文件末尾,则返回EOF
。
int fscanf(FILE *stream, const char *format, ...);
fscanf函数从指定的文件流stream中按照指
读取文件中的两个数字,我事先在input文件中放了两个数字68和6。
#include<stdio.h>
int main()
{
FILE* file = fopen("input.txt", "r");
if (file != NULL)
{
int num1, num2;
if (fscanf(file, "%d %d", &num1, &num2) == 2)
{
printf("读取的两个整数分别是: %d 和 %d\n", num1, num2);
}
else
{
printf("读取文件时发生错误或者已达到文件末尾\n");
}
fclose(file);
}
else
{
printf("无法打开文件\n");
}
return 0;
}
fprintf
是C语言标准库中用于向文件中按照指定格式写入数据的函数。
fprintf
函数根据指定的格式字符串format
将数据按照指定格式写入到指定的文件流stream
中。与printf
函数类似,fprintf
函数可以接受可变数量的参数,根据format
字符串中的格式说明符进行格式化输出。
fprintf
函数返回成功写入的字符数,如果发生写入错误,则返回负值。
int fprintf(FILE *stream, const char *format, ...);
现在,我想要写入两个%d的数字到output的文件中去。
//fprintf
#include<stdio.h>
int main()
{
FILE* file = fopen("output.txt", "w");
if (file != NULL)
{
int num1 = 10, num2 = 20;
if (fprintf(file, "两个整数分别是:%d 和%d \n", num1, num2) > 0)
{
printf("数据已经成功写入文件\n");
}
else
{
printf("写入文件时发生错误\n");
}
fclose(file);
}
else
{
printf("无法打开文件\n");
}
return 0;
}
运行完成后,我们可以看见两个数字已经写入。
sscanf
是C语言标准库中用于从字符串中按照指定格式读取数据的函数。
sscanf
函数从指定的字符串str
中按照指定的格式字符串format
读取数据,并将读取到的数据按照格式转换后存储到对应的变量中。sscanf
函数的使用方式与scanf
函数类似,只是scanf
是从标准输入中读取数据,而sscanf
是从字符串中读取数据。
sscanf
函数返回成功匹配并转换的参数个数,如果没有匹配成功,则返回0。
int sscanf(const char *str, const char *format, ...);
我现在要从字符串按照指定格式读取出三个不同类型的数据。
//sscanf
#include<stdio.h>
int main()
{
char input[] = "35 54.3 hello";
int num1;
double num2;
char str[10];
// 从字符串中按照格式"%d %f %s"读取数据
if (sscanf(input, "%d %lf %s", &num1, &num2, str) == 3)
{
printf("从字符串中读取的数据分别是:%d, %.2lf, %s\n", num1, num2, str);
}
else
{
printf("读取字符串时发生错误\n");
}
return 0;
}
运行结果
sprintf
函数是C语言中的一个标准库函数,用于将格式化的数据写入字符串中。
sprintf
函数的作用是根据指定的格式化字符串format
,将后续的参数按照格式化要求写入到字符数组str
中。它的使用方式与printf
函数类似,不同之处在于printf
函数将输出结果写入到标准输出流(通常是显示器),而sprintf
函数将输出结果写入到指定的字符数组中。
int sprintf(char *str, const char *format, ...);
格式化数据
//sprintf
#include <stdio.h>
int main()
{
char buffer[100];
int num = 123;
double value = 45.67;
char str[] = "hello";
sprintf(buffer, "数字:%d, 浮点数:%.2lf, 字符串:%s", num, value, str);
printf("格式化后的字符串:%s\n", buffer);
return 0;
}
fseek
函数是C语言标准库中用于移动文件指针位置的函数,它允许程序在文件中定位到指定的位置,从而进行读取或写入操作。
int fseek(FILE *stream, long offset, int origin);
//fseek
#include <stdio.h>
int main()
{
FILE* fp = fopen("example.txt", "r");
if (fp != NULL)
{
fseek(fp, 10, SEEK_SET); // 将文件指针移动到文件开头后的第10个字节处
// 进行读取或写入操作
fclose(fp);
}
else
{
printf("打开文件失败\n");
}
return 0;
}
ftell
函数是C语言标准库中用于获取文件指针当前位置的函数。它返回当前文件位置指针的偏移量,以字节数表示。
long int ftell(FILE *stream);
读取字节数
#include <stdio.h>
int main()
{
FILE* fp = fopen("example.txt", "r");
if (fp != NULL)
{
fseek(fp, 0, SEEK_END); // 将文件指针移动到文件末尾
long int file_size = ftell(fp); // 获取文件指针当前位置(即文件大小)
printf("文件大小为 %ld 字节\n", file_size);
fclose(fp);
}
else
{
printf("打开文件失败\n");
}
return 0;
}