常用标准IO

标准IO

2024.1.27写

文件设置

FILE *fopen(const char *pathname, const char *mode)
//打开文件

  1. 返回值
    返回file指针,本质是结构体指针(赋值给FILE变量)//NULL

  2. 函数使用
    pathname 路径,mode 模式

mode  
r可读 r+可读可写  
w可写 w+可读可写,新建文件  
a可写,追加 a+可读可写,追加
FILE *file;//使用时要定义FILE结构体变量
file=fopen("./1.txt","r+");  
if(file==NULL)perror("打开文件失败");

size_t fread(void *ptr,size_t size,size_t nmemb,FILE *stream)
//读取文件

  1. 返回值
    返回'完整'数据块个数(但都可以读取)//-1

  2. 函数使用
    *ptr 读取内容,size 要读取的数据块大小,字节 nmemb 打算读取几个数据块,*stream 要读取的文件

注意事项-数据块  
fread(buf,10,1,fd)//所有数据切成 10字节一份 读取1个数据块(一共10给字节)  
so 10,1 2,5 5,2 都一样 是10个字节

size_t fwrite(const void *ptr, ize_t size,size_t nmemb,FILE *stream)
//写入文件

  1. 返回值
    返回nmemb的值,也会给垃圾数//-1

  2. 函数使用
    *ptr 读取内容 ,ize 要写入的数据块大小,字节 nmemb 打算写入几个数据块,*stream 要读取的文件

注意事项-垃圾数
使用fwrite时 注意fread的返回值
//更好的写法
ret=fread(buf,1,100,file1);
fwrite(buf,1,ret,file2);
if(ret != 100)break;

fclose(FILE *file)
//关闭文件

  1. 返回值
    0//-1

光标设置

int fseek(FIEL *stream,long offset,int whence)
//移动光标//返回与lseek不同,其他相同

  1. 返回值
    0//-1

  2. 函数使用
    *stream 文件路径,offset 移动数,whence 起始位置

whence  
SEET_SET 文件开头 | SEET_CUK 原先位置 | SEET_END 文件末尾

int ftell(FIEL *stream)
//读取位置

  1. 返回值
    当前与起始位置的字节数//-1

void rewind(FILE *stream)
//移动光标至起始位置

字符串函数

fgets()/fputs()

  1. 读写文件
    char *fgets(char *s,int size,FILE *stream)
    //按行读取数据

    1. 返回值
      被读字符串首地址//-1

    2. 函数使用
      s存储字符数组,size被读字节(注意'\0' \r \n),FILE文件指针

    注意-读取时,最后一位为'\0',读取少一字节  
    条件:有size=5  
    size=5时 读4(少读一个,特点)  
    size=6时 全部读取
    size=7时,打印\n  
    在win系统下 回车=\r\n size=8时 打印\n
    

    int fputs(const char *s, FILE *stream)
    //按行写入数据(追加写入)

  2. 读写IO
    fgets(buf,100,stdin)
    //stdin(标准输入)
    fputs(buf,stdout)
    //stdout(标准输出)

    fgets  
    只认回车/回车也会被读入/只能读字符串,不能读数字  
    键盘/打印-因为键盘/屏幕,也是文件
    

gets()/puts()

char *gets(char *s)
//读取字符串 I

int puts(const char *s)
//输出字符串 O

fgets/gets区别
文件操作/字符操作

fgetc()/fputc()

int fgetc(FILE *stream)
//读取文件 一个ASCII值

  1. 返回值
    ASCII//-1

int fputc(int c, FILE /*stream)
//一个ASCII码值 写入文件


getc()/putc()

int getc(FILE *stream)
//从文件读取一个字符
int putc(int c,*stream)
//从文件输出一个字符

fgetc/getc区别
函数/宏(快一点,但参数不能有副作用)

getchar()/putchar()

int getchar()
//从IO缓冲区读取一个字符//读取键盘输入

int putchar()
//从IO缓冲区输出一个字符//显示屏幕输出

注意-缓冲区概念
posted @ 2024-01-27 20:43  night000day  阅读(40)  评论(0)    收藏  举报