day24文件操作--标准IO

发布于:2024-12-21 ⋅ 阅读:(158) ⋅ 点赞:(0)

fread()/fwrite(): 他们可以进行二进制文件的读写.

数组初始化时长度不能放变量 (例a【n】 ={})


	
int a = 2 ;
vim -t size_t 
读:

size_t  fread(void  *ptr,  size_t size, size_t nmemb, FILE *stream);
功能:
      从指定的stream流对象中获取nmemeb个大小为size字节的数据块到ptr
      所在的本地内存中。
参数:
      ptr    要存储数据的本地内存一般是数组或者结构体指针
	  size   单个数据块的元数据大小。最小单元的大小
	  nmemb  要获取的数据块的个数,拷贝的数据块个数。
	  stream 要获取数据的源文件流对象,如果是stdin表示从
	  键盘获取数据,如果是fp文件则表示从普通文件获取。
返回值:
        成功 :返回实际获取数据的次数。
		失败 0

写:
size_t fwrite(const void  *ptr,  size_t  size,size_t nmemb, FILE *stream);
功能:
      从ptr所在本地内存中取出nmemb个大小为size的数据块写入到stream流对应
      的文件流对象中。
参数:ptr 要写的数据块地址,一般是数组或者结构体指针
	  size  要写的数据块元数据大小,单位是字节
	  nmemb 要写的数据块的个数
	  stream 要写的目标文件流对象。如果是stdout则表示数据会
	  写到终端屏幕显示,如果是fp的普通文件则会写入到文件中。

返回值:成功 写入的个数。
	失败	0



文件定位函数fseek(),ftell(),frewind()

1.fseek
	int fseek(FILE *stream, long offset, int whence);//long -->signed long 
	功能:
		  将stream流文件中的文件指针
		  从whence位置开始
		  偏移offset字节的长度。
		  
	参数:
		  stream  要移动文件指针的目标文件流对象。 
			   注意:不支持设备文件,一般用于普通文件。  
		  offset  
				  要在文件内偏移的距离,单位字节。
				  如果值为整数,则向文件末尾偏移
				  如果值为负数,则向文件开头偏移                    
		  whence  偏移的起始位置,由系统定义的三个宏开始。
			SEEK_SET  文件的开头位置   offset 只能是正值 
			SEEK_CUR  文件的当前位置   offset 可正 可负 
									   但是 
									   如果当前位置与 SEEK_SET重合 offset 不能是负的 
									   
			SEEK_END  文件的末尾位置   offset 可正 可负 
									   正 --- 空洞文件 
							 
	返回值:	
		成功: 返回 0
		失败:  -1;
		eg:
		
		fseek(fp,100,SEEK_SET); //从头开始往后偏移100个字节 
		fseek(fp,-100,SEEK_SET);//错误的越界
		

如果从文件的指定位置向后偏移过程中已经超过了文件
的当前末尾位置,则会自动以'\0'来填充文件内容,从
而形成一种被称为"空洞文件" 的特殊文件。

产生空洞文件的操作:
1.进行偏移 
2.做一次写操作 
  fputc(0,fp);
  
 
  
用途:
   提前抢占磁盘空间
   下载时可以看是否内存够用
  



     2.	ftell
		long ftell(FILE *stream);
		
		功能:获取文件位置指示器的偏移量
		参数:求偏移量的文件流指针
		返回值:文件位置指示器到文件开头的偏移字节数

	 3. rewind(fp);
	     void rewind(FILE *stream)
		功能:复位流指针到开头
			 
		参数:流
		返回值:void


rewind()  等效于:
fseek(stream,0,SEEK_SET);

格式化输入输出

  
	1.fprintf
	2.sprintf
	
	   int printf(const char *format, ...);
       int fprintf(FILE *stream, const char *format, ...);
       功能:将格式化的字符串写入文件
       把stream变为 stdout  就等价于printf 

       int sprintf(char *str, const char *format, ...);
       功能:将格式化的字符串写入数组
       所以可以传两个字符串拼接起来,放到str里完成字符串的拼接
       或者传整形的到“”里,就会转换为字符串型
fscanf
sscanf

time,ctime,localtime

分割字符串

char *strtok(char *str,const char *delim)
	功能:分割字符串
	参数:
	str:需要分割的字符串
	delim:分隔符(到哪里分开)
	返回值
	成功:返回分割后的首地址
	失败:NULL


	
 	那分开后的后部分在哪里呢
再分一次就好了,例如下
har buff[] = {"abate            v. make or become less\r\n"};
	
	char *p = strtok(buff, " ");
	if (p != NULL)
	{
		printf("p : %s\n", p);
	}
	
	p = strtok(NULL, "\r\n");
	if (p != NULL)
	{


		printf("p = %s\n", p);
	}

网站公告

今日签到

点亮在社区的每一天
去签到