C语言标准库常用函数

输入输出:<stdio.h>

文件操作

#include <stdio.h>
FILE *fopen(const char *filename, const char *mode);
FILE *freopen(const char *filename, const char *mode, FILE *stream);
int fflush(FILE *stream);
int fclose(FILE *stream);
int remove(const char *filename);
int rename(const char *oldname, const char *newname);
FILE *tmpfile(void);
char *tmpnam(char s[L_tmpnam]);
int setvbuf(FILE *stream, char *buf, int mode, size_t size);
void setbuf(FILE *stream, char *buf);

格式化输出

int fprintf(FILE *stream, const char *format, ...);
int printf(const char *format, ...);
int sprintf(char *s, const char *format, ...);

int vprintf(const char *format, va_list arg);
int vfprintf(FILE *stream, const char *format, va_list arg);
int vsprintf(char *s, const char *format, va_list arg);

格式化输入

int fscanf(FILE *stream, const char *format, ...);
int scanf(const char *format, ...);
int sscanf(char *s, const char *format, ...);

字符输入输出

int fgetc(FILE *stream);
char *fgets(char *s, int n, FILE *stream);

int fputc(int c, FILE *stream);
int fputs(const char *s, FILE *stream);

int getc(FILE *stream);
int getchar(void);
char *gets(char *s);

int putc(int c, FILE *stream);
int putchar(int c);
int puts(const char *s);

int ungetc(int c, FILE *stream);

直接输入输出

size_t fread(void *ptr, size_t size, size_t nobj, FILE *stream);
size_t fwrite(const void *ptr, size_t size, size_t nobj, FILE *stream);

文件定位

int fseek(FILE *stream, long offset, int origin);
long ftell(FILE *stream);
void rewind(FILE *stream);

int fgetpos(FILE *stream, fpos_t *ptr);
int fsetpos(FILE *stream, const fpos_t *ptr);

错误处理

void clearerr(FILE *stream);
int feof(FILE *stream);
void ferror(FILE *stream);
int perror(const char *s);

字符类别测试:<ctype.h>

image-20210214151154168

  • 参数类型:
    • unsigned char类型
    • EOF的int对象
  • 返回值类型:int

字符串函数:<string.h>

image-20210214153144129

  • 参数类型:
    • 变量s和t:char *
    • cs和ct:const char *
    • n:size_t
    • c:int(将被转换为char类型)

image-20210214153638159

以mem开头的函数按照字符数组的方式操作对象,主要目的是提供一个高效的函数接口。

参数顺序是:目标s = 源ct

参数类型:

  • s和t:void *
  • cs和ct:const void *
  • n:size_t
  • c:int(将被转换为unsigned char类型)

数学函数:<math.h>

image-20210214154006707

参数类型;

  • x和y:double
  • n:int

返回值类型:double

实用函数:<stdlib.h>

声明了数值转换、内存分配以及其它类似工作的函数

double atof(const char *s);
int atoi(const char *s);
long atol(const char *s);

double strtod(const char *s, char **endp);
long strtol(const char *s, char **endp, int base);
unsigned long strtoul(const char *s, char **endp, int base);

int rand(void);
void srand(unsigned int seed);

void calloc(size_t nobj, size_t size);
void *malloc(size_t size);
void *realloc(void *p, size_t size);
void free(void *p);

void abort(void);
void exit(int status);
int atexit(void (*fcn)(void));

int system(const char *s);
char *getenv(const char *name);

void *bsearch(const void *key, const void *base,
             size_t n, size_t size,
             int (*cmp)(const void *keyval, const void *datum));

void qsort(void *base, size_t n, size_t size, 
          int (*cmp)(const void *, const void *));

int abs(int n);
long labs(long n);
div_t div(int num, int denom);
ldiv_t ldiv(long num, long denom);

诊断:<assert.h>

assert宏用于程序诊断

void assert(int expression);

当表达式值为0时,assert宏将在stderr中打印一条消息,打印完后宏将调用abort终止程序的执行。

消息格式如:

Assertion failed: 表达式, file 源文件名, line行号

预处理器宏:

  • 源文件名:__FILE__
  • 行号:__LINE__

如果定义了宏NDEBUG,同时又包含了头文件<assert.h>,则assert宏将被忽略。

可变参数表:<stdarg.h>

//ap依此指向每个实际参数
va_list ap;
//访问任何未命名参数前,必须用va_start宏初始化ap一次
//lastarg是最后一个命名形参
void va_start(va_list ap, lastarg);
//产生一个与未命名参数具有相同类型和数值的值
//同时修改ap,使其指向下一个未命名参数
type va_arg(va_list ap, type);
//处理完所有参数后,在退出函数前,必须调用宏va_end
void va_end(va_list ap);

非局部跳转:<setjmp.h>

int setjmp(jmp_buf env);
void longjmp(jmp_buf env, int val);

信号:<signal.h>

void (*signal(int sig, void (*handle)(int)))(int);
int raise(int sig);

日期和时间函数:<time.h>

表示时间的算术类型:clock_t和time_t

日历时间结构体tm,其成员包括:

image-20210214195337120

clock_t clock(void);
time_t time(time_t *tp);
double difftime(time_t time2, time_t time1);
time_t mktime(struct tm *tp);

char *asctime(const struct tm *tp);
char *ctime(const time_t *tp);
struct tm *gmtime(const time_t *tp);
struct tm *localtime(const time_t *tp);

size_t strftime(char *s, size_t smax, const char *fmt, const struct tm *tp);

与具体实现相关的限制:<limits.h>和<float.h>

头文件<limits.h>定义了一些表示整型大小的常量。列出的值是可接受的最小值。

image-20210214201600788

下表列出的名字是<float.h>的子集,表示与浮点算术运算相关的一些常量,给出的每个值代表相应量的最小取值。

image-20210214201640885