个人知识库 个人知识库
首页
关于
  • C语言
  • CPlusPlus
  • Linux
  • PHP
  • Nginx
  • MySQL
  • Redis
  • Docker
  • Kubernetes
  • SRS
阅读
常用工具
  • 分类
  • 标签
  • 归档
GitHub

Agnes001

坚持是一件很伟大的事业
首页
关于
  • C语言
  • CPlusPlus
  • Linux
  • PHP
  • Nginx
  • MySQL
  • Redis
  • Docker
  • Kubernetes
  • SRS
阅读
常用工具
  • 分类
  • 标签
  • 归档
GitHub
  • C语言

    • 内存
    • 数组
    • 指针
    • 字符串
    • 预处理
    • 结构和联合
    • 文件操作
    • 标准函数库
      • 1 输入/输出函数
        • 1.1 错误报告
        • 1.2 终止执行
        • 1.3 流I/O
        • 1.4 打开流
        • 1.5 关闭流
        • 1.6 字符 I/O
        • 1.7 未格式化的行I/O
        • 1.8 格式化的行I/O
        • 1.9 二进制I/O
        • 1.10 刷新和定位函数
      • 2 整型函数
      • 3 日期和时间函数
      • 4 查找
      • 5 排序
    • C语言总结
  • CPlusPlus

  • Lua技术栈

  • edoyun

  • 内存管理

  • 数据结构

  • 网络编程

  • Linux

  • 池化技术

  • 操作系统

  • python

  • 编程技术
  • C语言
Agnes001
2021-11-12

标准函数库

# 1 输入/输出函数

# 1.1 错误报告

#include <stdio.h>
// perror函数简化向用户报告这些特定错误的过程。
void perror(char const *message);

# 1.2 终止执行

#include <stdlib.h>
void exit(int status); // EXIT_SUCCESS  EXIT_FAILURE

# 1.3 流I/O

关于文件I/O:

  1. 程序为必须同时处于活动状态的每个文件声明一个指针变量,其类型是FILE *。这个指针指向这个FILE结构。当它处于活动状态时由流使用。
  2. 流通过调用fopen函数打开。fopen和操作系统验证文件或设备确实存在并初始化FILE结构。
  3. 然后,根据需要对文件进行读取或写入。
  4. 最后,调用fclose函数关闭流。关闭流可以防止与它关联的文件被再次访问,保证任何存储与缓冲区的数据被正确地写到文件中,并且释放FILE结构使它可以用于另外的文件。
  • 标准流I/O更为简单,不需要打开或关闭。标准流的I/O函数以三种形式处理数据:单个字符、文本行和二进制数据。
数据类型 输入 输出 描述
字符 getchar putchar 读取(写入)单个字符
文本行 gets
scanf
puts
printf
文本行未格式化的输入(输出)
格式化的输入(输出)
二进制数据 fread fwrite 读取(写入)二进制数据

EOF——到达了文件尾

# 1.4 打开流

FILR *fopen(char const *name, char const *mode);
读取 写入 添加
文本 “r” “w” “a”
二进制 “rb” “wb” “ab”

# 1.5 关闭流

int flose(FILE *f);
// 如果执行成功,返回零,否则返回EOF

# 1.6 字符 I/O

// 输入
int fgetc(FILE *stream);
int getc(FILE *stream);
int getchar(void );   //ch = getchar();
// 输出
int fputc(int character, FILE *stream);
int getc(int character, FILE *stream);
int getchar(int character);

# 1.7 未格式化的行I/O

char *fgets(char *buffer, int buffer_size, FILE *stream);
char *gets(char *buffer);
char *fputs(char const *buffer, FILE *stream);
char *gets(char const *buffer);

# 1.8 格式化的行I/O

int fscanf(FILE *stream, char const *format, ...);
int scanf(char const *format, ...);
int sscanf(char const *string, char const *format, ...);
int fprintf(FILE *stream, char const *format, ..);
int printf(char const *format, ...);
int sprintf(char const *buffer, char const *format, ...);

scanf存在缓冲:通过scanf由键盘输入内容时,并不是直接赋值给变量,而是送给缓冲,缓冲可以接受从键盘输入的很多内容。当执行到scanf时,scanf就会从缓冲内读取数据,(那么问题来了)scanf怎么知道读到哪结束?那就需要空白符(空白符:指空格符、制表符、回车符)来控制了 ;当scanf读到空白符时,就停止读取,将空白符前面的内容赋值给scanf中的变量。
当你的程序执行到scanf时,会从你的缓冲区读东西,如果缓冲区是空的,就阻塞住,等待你从键盘输入。
scanf("%s\n", buf);
\n是空白符,当从键盘输入时要按照该格式输入;用\n过滤scanf结束时的回车,缓冲区的\n不会对后续输入造成影响,反而会导致需要额外输入一个非空白字符作为结束,所以scanf不要以\n作为结束。

# 1.9 二进制I/O

size_t fread(void *buffer, size_t size, size_t count, FILE *stream);
size_t fwrite(void *buffer, size_t size, size_t count, FILE *stream);

# 1.10 刷新和定位函数

int fflush(FILE *stream);
void rewind(FILE *stream); // 将读写指针设置回起始位置
long ftell(FILE *stream);
int fseek(FILE *stream, long offset, int from);
如果form是... 你将定位到...
SEEK_SET 起始位置
SEEK_CUR
SEEK_END 末尾
// fseek函数与ftell函数综合应用:可以用fseek函数把位置指针移到文件尾,再用ftell函数获得这时位置指针距文件头的字节数,这个字节数就是文件的长度.

#include <stdio.h>
int main()
{
  FILE *fp;
  char filename[80] = "xxxxxxx";
  long length;
  //以二进制读文件方式打开文件
  fp=fopen(filename,"rb");
  if(fp==NULL)
     printf("file not found!/n");
  else
  {
    //把文件的位置指针移到文件尾
    fseek(fp,OL,SEEK_END);
    //获取文件长度;
    length=ftell(fp);
    printf("该文件的长度为%1d字节/n",length);
    fclose(fp);
  }
}

#include   <stdio.h> 
#include   <stdlib.h>  
void main()   
{    
  FILE   *fp;    
  long int size;     
  char   *buff;   
  if((fp=fopen("w.dat","rb")) == NULL)   
  {  
    printf("cannot   open   file/n");    
    exit(1);    
  }     
  fseek(fp,0,SEEK_END);  
  size=ftell(fp);  
  buff=(char *)malloc(size);  
  fseek(fp,0,SEEK_SET);   
  if(fread(buff,1,size,fp) != size)  
  {      
    printf("read error!!");    
  }      
  free(buff);  
  buff = NULL;
}

# 2 整型函数

#include <stdlib.h>
// 算术
int abs(int value);
div_t div(int numerator, int denominator);
// 随机数
int rand(void);
void srand(unsigned int seed);
srand((unsigned int)time(0)); // 使用时间作为随机数产生器的种子
// 字符串转换
int atoi(char const *string);
long int atol(char const *string);

# 3 日期和时间函数

#include <time.h>
clock_t clock(void);// 程序开始执行起处理器所消耗的时间
time_t time(time_t *returned_value);
strunct tm *localtime(time_t const *time_value);

# 4 查找

// 对数组以升序的方式进行排序
void qsort(void *base, size_t n_elements, size_t el_size, int (*compare)(void const *, void const *));
// 第1个参数指向需要排序的数组
// 第2个参数指定数组中元素的数目
// 第3个参数指定每个元素的长度
// 第4个参数是一个函数指针,用于对需要排序的元素类型进行比较

# 5 排序

// bsearch函数:在一个已经排好序的数组中用二分法查找一个特定的元素
void *bsearch(void const *key, void const *base, size_t n_elements, size_t el_size, int (*compare)(void const *, void const *));
// 第1个参数指向你需要查找的值
// 第2个参数指向查找所在的数组
// 第3个参数指定数组中元素的数目
// 第4个参数每个元素的长度
// 第5个参数是一个函数指针
编辑此页
文件操作
C语言总结

← 文件操作 C语言总结 →

Theme by Vdoing
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式