文件操作函数

目录

fopen

fclose

feof

fperror

fgetc

fputc

fputs

fgets

fpritnf

fscanf 

 sprintf  

sscanf  and sprintf 合集

sscanf

fwrite

fread

fseek

 ftell

 fwind



fopen

打开文件函数 , 返回一个FILE*类型的指针(文件信息区的地址),打开失败返NULL

打开的文件必须包含在工程目录下,也就是与 .c文件在一个文件里面

两个参数

        一个是文件名

        一个是打开的方式(以什么样的方式打开这个文件)

返回值:

        打开成功返回该指针 

        失败返回NULL 

提供的打开方式

        一定要用双引号写,const char * mode 接收的是地址,单引号的那个是一个常量字符(没有地址),而字符串就有。

        "w",以写的形式打开一个文件,如果文件里面有内容将会被清空,再写入。

        “a”,则不会,在末尾接着写。

        


fclose

作用:关闭文件,给他传递上被打开文件的 FILE* 类型的指针变量。

fclose 没有置空功能建议关闭文件后,将那个指针变量置为空指针

返回值

        关闭成功返回0 

        失败返回EOF 


feof

作用:读取文件结束时,检查是否为EOF指示器(判断结束的原因)

返回值:        

        如果为EOF指示器返回非零值,不是则返回0 


fperror

作用:文件读取结束,检查是否为错误指示器(判断结束的原因)

返回值:

        如果为错误指示器返回非零值,不是则返回0


fgetc

作用:从文件中获取字符,读取一个,光标跳转到下一个

        读取成功,返回相应字符的ASCLL码值(替身为整型),读取失败或者遇见末尾返回

        读取失败,返回 EOF(-1) 设置 错误指示器(fperror)可判断

        遇见末尾,返回 EOF(-1) 设置流的 EOF 指示符 (feof)判断

        参数为文件指针 


fputc

作用:将字符写入文件中,一次只能写一个字符

写一个字符文件里面的光标就会自动跳转到后面

 int character 

        int 类型的原因是字符传递的是ASCLL码值,对应的int的类型十进制数 97 所以 character  这个变量里存的就是 97 

返回值 

        写的什么字符,就返回什么字符,如果发生错误返回 EOF 并设置错误指示器 

        字符a++,字符类型的变量在进行运算时会整形提升,也就是对应的ascll计算 

        'a' +1 ,对应的十进制加一,然后放入 a 中, a 里面就是 98 ,如果以%d打印出来的就是98 %c 以字符的格式进行打印,把 a 98 看成一个字符然后打印出来


fputs

作用:把一个字符串写入文件,\0为终止,不会写入\0。

 返回值:

        写入成功返回非负值

        错误返回 EOF(-1),并设置错误指示器

fgets

 返回值: 

        读取成功返回目标地址,char *str

        读取错误返回 NULL,并设置错误指示符(fperror)

        遇见文件末尾也返回NULL,并设置EOF指示符(feof)

作用:从文件中读取字符串。有多少读多少包括\n(p里面的字符小于num).

需要注意的参数是 num

        num 的意思是,最多读取多少个字符,并且会自动分配一个空间给 \0,所以有效读取字符个数只有 num-1

代码如下:这是以读的方式打开的,所以先创建一个文件,再读

int main()
{
	FILE* p = fopen("data.txt", "r");
	if (p == NULL)
	{
		perror("fopen");
		return 6;
	}
	char arr[20] = {1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1};
	fgets(arr, 10, p);
	//从p中读取一个长度为10的字符串
	
	fclose(p);
	p = NULL;
	return 0;
}

fpritnf

        按照对应的格式,以文本的形式 写入 目标文件

  包含标准流,把 目标文件地址  改成stdout(标准输出流)或者是stdin(标准输入流),

返回值:

        成功后,将返回写入的字符总数。
        如果发生写入错误,则设置错误指示符 (ferror) 并返回负数。
        如果在写入宽字符时发生多字节字符编码错误,则将 errno 设置为 EILSEQ 并返回负数。

fscanf 

        从文件中读取数据,以相应的格式存储到对应的地址。

        fscanf也要取地址本身是地址就不用

        标准输入流的应用,在键盘上读取的数组放入目标地址arr

       包含标准流,把目标文件地址  改成stdout(标准输出流)或者是stdin(标准输入流),

 返回值:

        成功后,该函数返回已成功填充的参数列表的项目数。此计数可以与预期的项目数匹配,也可以由于匹配失败、读取错误或文件末尾的到达范围而更少(甚至为零)。
        如果发生读取错误或在读取时达到文件末尾,则设置正确的指示器(feof 或 fail)。而且,如果在成功读取任何数据之前发生任何一种情况,则返回 EOF
        如果在解释宽字符时发生编码错误,该函数会将 errno 设置为 EILSEQ。

 sprintf  

        把相应的数据按照相应的格式放入字符数组中

返回值:

        成功返回写入分字符总数 

        失败返回负数 

汉字算两个字符,加两个空格一共是10个字符

int main()
{
	char arr[100] = { 0 };
	char Name[] = "张伟";
	char a = 66;//== B
	int c = 666;

	//将 "张伟",66/B,666放入字符串中
	int b = sprintf(arr, "%s %c %d", Name, a, c);
	//然后打印出来
	printf("%s\n", arr);
	printf("%d %c", b, 10);
	//printf("%zd\n", sizeof(Name));

	//再把字符串里的数组拷贝出来
	//sscanf(arr, "%s %c %d", Name1, &a1, &c1);
	//打印
	/*printf("%s ", Name1);
	printf("%c  ", a1);
	printf("%d", c1);*/

	return 0;
}

如果说%s%c%d这里没有空格那么打印出来也没有,如果有打印出来也有

不只是没有空格这么简单如果  "   "    有空格这个空格也会占空间


sscanf  and sprintf 合集

int main()
{
	char arr[100] = {0};
	char Name[] = "张伟";
	char a = 66;//== B
	int c = 666;
	char Name1[10] = { 0 };
	char a1 = 0;
	int c1 = 0;
	//将 "张伟",66/B,666放入字符串中
	sprintf(arr, "%s %c % d", Name, a, c);
	//然后打印出来
	printf("%s\n", arr);
	//再把字符串里的数组拷贝出来
	sscanf(arr, "%s %c %d", Name1, &a1, &c1);
	//打印
	printf("%s\n", Name1);
	printf("%c\n", a1);
	printf("%d\n", c1);

	return 0;
}

 


sscanf

把字符串里的东西,按照相应的格式放入右边中。(以%s%d%f,的类型格式解读)

返回值:

        成功后,该函数返回已成功填充的参数列表中的项目数。此计数可以与预期的项数匹配,也可以在匹配失败的情况下小于 (甚至零) 。
        如果在成功解释任何数据之前输入失败,则返回 EOF

int main()
{
	char arr[100] = { 0 };
	char Name[] = "张伟";
	char a = 66;//== B
	int c = 666;

	//将 "张伟",66/B,666放入字符串中
	int b = sprintf(arr, "%s %c %d", Name, a, c);
	//然后打印出来
	printf("%s\n", arr);
	printf("%d %c", b, 10);
	//printf("%zd\n", sizeof(Name));
	char Name1[10] = { 0 };
	char a1 = 0;
	int c1 = 0;
	//再把字符串里的数组拷贝出来
	int bb =sscanf(arr, "%s %c %d", Name1, &a1, &c1);
	printf("%d\n", bb);
	//打印
	printf("%s ", Name1);
	printf("%c  ", a1);
	printf("%d", c1);

	return 0;
}


fwrite

        作用,以二进制的形式写入文件

参数1,被写的数组

参数2,每个元素的大小

参数3,你想写的个数

参数4,目标文件

返回值:

        返回成功写入的元素总数。
        如果此数字与 count 参数不同,则写入错误会阻止函数完成。在这种情况下,将为设置错误指示器 (ferror)。
        如果 size 或 count 为零,则函数返回零,错误指示器保持不变。
size_t 是无符号整数类型。

fread

        作用:以二进制形式读取文件里面的的数组。

返回值:

        返回成功读取的元素总数。
        如果此数字与 count 参数不同,则表示读取时发生读取错误或达到文件末尾。在这两种情况下,都设置了正确的指示器,可以分别使用 ferror 和 feof 进行检查。
        如果 size 或 count 为零,则函数返回零,并且 ptr 指向的流状态和内容都保持不变。
size_t 是无符号整数类型。

fseek

修改文件光标位置,(如果读或写了一个数据,那么光标会自动跳转到下一个位置

   三个参数   

        1、文件的地低。

        2、偏移量(可为负)。

        3、光标的起始位置,三个选项

                                                        seek_set : 文件起始位置

                                                        seek_cur : 光标当前位置

                                                        seek_end : 文件末尾

返回值:

        如果成功,该函数返回零。
        否则,它将返回非零值。
        如果发生读写错误,则设置错误指示器 (ferror)。


 ftell

       作用: 返回偏移量,当前光标位置与起始的之差。


 fwind

        回到起始地址

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值