C标准库-2

目录

第十二章:<stdio.h>

第十三章:<stdlib.h>

第十四章:<string.h>

第十五章:<time.h>





第十二章:<stdio.h>

缓存区:

标准I/O提供缓存的目的是尽可能减少使用read和write调用的数量(系统调用比普通函数调用开销大)。它也对每个I/O流自动地进行缓存管理,避免了应用程序需要考虑这一点所带来的麻烦。
标准I/O提供了三种类型的缓存:
    (1) 全缓存。在这种情况下,当填满标准I/O缓存后才进行实际I/O操作。对于驻在磁盘上的文件通常是由标准I/O库实施全缓存的。
    (2) 行缓存。在这种情况下,当在输入和输出中遇到新行符时,标准I/O库执行I/O操作。这允许我们一次输出一个字符(用标准I/O fputc函数),但只有在写了一行之后才进行实际I/O操作。
    (3) 不带缓存。标准I/O库不对字符进行缓存。如果用标准I/O函数写若干字符到不带缓存的流中,则相当于用write系统调用函数将这些字符写至相关联的打开文件上。
标准出错流stderr通常是不带缓存的,这就使得出错信息可以尽快显示出来,而不管它们是否含有一个新行字符。
ANSI C要求下列缓存特征:
(1) 当且仅当标准输入和标准输出并不涉及交互作用设备时,它们才是全缓存的。
(2) 标准出错决不会是全缓存的
可以通过下面的函数改变缓存类型
    void setbuf(FILE *restrict fp, char *restrict buf);
    int setvbuf(FILE *restrict fp, char *restrict buf, int mode, size_t size);
这些函数必须在流打开之后、但是未对流做任何操作之前被调用
参数buf通常指向一个长度为BUFSIZ的缓冲区,BUFSIZ在stdio.h中定义,可自行输出查看   
    #ifndef BUFSIZ
    # define BUFSIZ _IO_BUFSIZ
如要关闭缓冲,将参数buf传入值为NULL

单字符输入\输出

int getc(FILE *fp),              
int fgetc(FILE *fp)
int getchar(void)
int putc(int c, FILE *fp)
int fputc(int c, FILE *fp)
int putchar(int c)

字符串输入\输出:

char * gets(char* buf);        //接受换行符之前所有字符(不论是开头的还是中间的空格,制表都包括在内)并自动添加'\0',它也会接受最后的那个换行符,但是会丢弃它。gets()可能写越界,常用更安全的fgets()。
char * fgets ( char * str, int num, FILE * stream );          //读取不超过num-1个字符,然后在末尾加上结束符 '\0' ,或者遇到换行符结束输入,同时换行符也被传入。                  
int puts(const char *char)        //每次将换行符写到输出
int fputs(const char * str, FILE * fp);        //将一个以NULL终止的字符串写到指定的流,终止符NULL不写出

格式化输入\输出:

int scanf(const char *format, ...)    //从标准sdtin输入: 
int sscanf(const char *buf, const char *format, ...)        //从字符串buf输入;
int fscanf(FILE *fp, const char *format, ...)        //从文件流fp输入:
int printf ( const char * format, ... )        //输出数据到标准stdout,要换行符才会立刻输出,否则在缓存区:
int sprintf (char *buf, size_t n, const char * format, ... )        //输出数据到字符串:
int fprintf (FILE *fp, const char * format, ... )        //输出数据到标准文件流:

文件操作

FILE *fopen(char *filename, char *mode);    //打开文件:
int fclose(FILE *fp);                //关闭文件:
size_t fwrite ( const void * ptr, size_t size, size_t count, FILE * stream );        //写入数据:
size_t fread(void *ptr, size_t size, size_t nmemb, FILE *stream) ;       //读出数据:
int fflush(FILE *stream);        //清空缓存区:
void rewind(FILE *stream);        //文件指针回到开头,清除文件流:
int feof(FILE *stream);        //判断文件指针是否到了结尾:
void clearerr(FILE *stream) ;       //清除给定流 stream 的文件结束和错误标识符:
long ftell(FILE *stream);            //返回文件的位置
int fseek(FILE *stream, long int offset, int whence) ;       //设置文件指针的位置:
    whence定义
    SEEK_SET    文件的开头
    SEEK_CUR    文件指针的当前位置
    SEEK_END    文件的末尾

文件打开方式

r代表read的简写,+代表可读可写,w代表write,b代表bit二进制位,t代表text

r  只读方式 打开文件,打开的文件必须存在
rt 只读打开 文本文件,该文本必须存在。
rb 只读打开 二进制文件,,该文本必须存在。
r+ 可读可写 打开文件,该文件必须存在,在文件开始位置写入,会覆盖后面的内容
rt+ 读写打开 文本文件,该文件必须存在,在文件开始位置写入,会覆盖后面的内容
rb+ 读写打开 二进制文件,该文件必须存在, 在文件开始位置写入,会覆盖后面的内容


w 只写方式 打开文件,若文件存在,则文件长度清零,若文件不存在则建立该文件。
wt 打开只写 文本文件,若文件存在,则文件长度清零,若文件不存在则建立该文件。
wb 打开只写 二进制文件,若文件存在,则文件长度清零,若文件不存在则建立该文件。
w+ 可读可写 打开文件,若文件存在,则文件长度清零,若文件不存在则建立该文件, 
wt+ 打开可读写 文本文件,若文件存在,则文件长度清零,若文件不存在则建立该文件。
wb+ 打开可读写 二进制文件,若文件存在,则文件长度清零,若文件不存在则建立该文件。


a 以附加的方式打开只写文件,若文件不存在,则建立文件,存在则在文件尾部添加数据,即追加内容。
at文本文件的追加,不存在则创建,只能写。
ab二进制数据的追加,不存在则创建,只能写。
a+以附加的方式打开可读写文件,不存在则建立文件,存在则写入数据到文件尾(这里的读文件,同样需要使用rewind()函数,但是写文件不需要rewind()函数,a是追加)。
at+读写打开一个文本文件,允许读或在文本末追加数据(这里的读文件,同样需要使用rewind()函数,但是写文件不需要rewind()函数,a是追加)。
ab+读写打开一个二进制文件,不存在则创建,允许读或在文本末追加数据(这里的读文件,同样需要使用rewind()函数,但是写文件不需要rewind()函数,a是追加)。

 


第十三章:<stdlib.h>

主要有6大类:

整型数学:abs,div,labs,lidv    
算法:bsearch,qsort,rand,srand        
文本转换:atof,atoi,atol,strtod,strtol,strtoul
多字节转换:mblen,mbstowcs,mbtowc,wcstombs,wctomb
存储分配:calloc,free,malloc,realloc
环境接口:abort,atexit,exit,getenv,system

1 文本转换

double atof (const char* nptr);        //除出错后的行为,它等价于: duoble strtod(nptr, (char **)NULL)
int atoi (const char*nptr);
long atol (const char*)nptr;
double strtod (const char*nptr, char**endptr);
long strtol (const char*nptr, char**endptr, int base);
unsigned long strtoul (const char*nptr, char**endptr, int base);

itoa()                将整型值转换为字符串,与ANSC不兼容,推荐使用sprintf()
itoa()                将长整型值转换为字符串,与ANSC不兼容,推荐使用sprintf()
ultoa()               将无符号长整型值转换为字符串,与ANSC不兼容,推荐使用sprintf()

2 算法

/*常量*/
#define RAND_MAX 0x7FFF     //rand的最大返回值
/*函数*/
void srand (unsigned int);     //置随机数发生器(种子)
int rand (void);     //返回下一个伪随机数
void* bsearch (const void*, const void*, size_t, size_t, int (*)(const void*, const void*));        //二分查找
void qsort (const void*, size_t, size_t, int (*)(const void*, const void*));    //快速查找

3 存储分配

常量
#define NULL ((void *)0) 空指针
函数
void* calloc (size_t, size_t); 分配内存, 并清零
void* malloc (size_t); 分配内存
void* realloc (void*, size_t); 重新分配内存, 返回新指针
void free (void*); 释放内存

4 环境接口

常量
#define EXIT_SUCCESS 0
#define EXIT_FAILURE 1
函数
void abort (void);        //使程序异常终止,除非捕获了信号SIGABRT且信号处理程序没有返回
void exit (int);        //是程序正常终止
int atexit (void (*func)(void));    //函数atexit注册的func指向的函数,该函数在程序正常终止的时候被调用,而不需要任何参数
int system (const char*name);        //系统命令        
char* getenv (const char*);        //搜索环境表,查找一个能和nane指向串匹配的串,返回一个指向串的指针,这个串与匹配的列表成员相关

5 数学运算

结构
typedef struct { int quot, rem; } div_t;
typedef struct { long quot, rem; } ldiv_t;
函数
int abs (int);            //绝对值
long labs (long);
div_t div (int, int);        //除法,向下取整
ldiv_t ldiv (long, long);

6多字节转换

常量
MB_CUR_MAX 多字节字符中的最大字节数
函数
size_t wcstombs (char*, const wchar_t*, size_t);    //宽字节转多字节,可转移多个
int wctomb (char*, wchar_t);                //宽字节转多字节,一次转一个
int mblen (const char*, size_t);            //确定一个宽字节字符的多字节序列长度
size_t mbstowcs (wchar_t*, const char*, size_t);
int mbtowc (wchar_t*, const char*, size_t);

 


第十四章:<string.h>

size_t strlen(const char *s) ;   -----求字符串长度,若字符串没有\0,这个函数会越过字符串的末尾。

char *strcpy(char *s1, const char *s2);     -----字符串拷贝
char *strncpy(char *s1, const char *s2, size_t n);
void *memcpy(void *dest, const void *src, size_t n);        ————从src复制n个字符到dest。
void *memmove(void *s1, const void *s2, size_t n);
 
char *strcat(char *s1, const char *s2);      -----字符串连接,两数组都要有'\0'作为字符串的结尾
char *strncat(char *s1, const char *s2, size_t n);
 
int strcmp(const char *s1, const char *s2);      -----字符串比较
注:不能直接用关系运算符比较两个字符串的大小。如 if(stra==strb) //错误
C++的string类对==操作符功能重载,可以使用stra==strb
int strncmp(const char *s1, const char *s2, size_t n);
int memcmp(const void *str1, const void *str2, size_t n);    ————比较str1和str2的前n个字节。
 
void *memchr(const void *str, int c, size_t n);        ————搜索str前n个字节第一次出现的字符c(转换为unsigned char类型)的指向。
char *strchr(const char *s, int c);
char *strrchr(const char *s, int c);        -----c最后一次出现的位置
char *strstr(const char *s1, const char *s);         ————子串s2在串s1中第一次出现的位置,没有找到返回NULL
 
char *strtok(char *s1, const char *s2);        ————以串s2为字符界定,把串s1分解

void *memset(void *str, int c, size_t n)        ————把字符c(转换为unsigned char类型)复制到符串参数str指向前n个字符。

 


第十五章:<time.h>

#define CLOCKS_PER_SEC  _CPS    ————函数clock的返回值的每秒的时间单位
typedef unsigned int clock_t;
typedef unsinged long time_t;
struct tm{
    int tm_sec;
    int tm_min;
    int tm_hour;
    int tm_mday;        //day of month, [1-31]
    int tm_mon;
    int tm_year;
    int tm_wday;        //weekday, [0-6]
    int tm_yday;        //day of year, [0, 365]
    int tm_isdst;        //夏令时标志, [0, +]
};
cloct_t clock(void):        ——获取程序开始执行后占用的处理器时间,返回值clock_t。
time_t time(time_t *timer):       ——获取当前系统时间(UTC时间)的time_t值。
char *ctime(const time_t *timer):     ————将time_t值转换为表示本地时间的字符串。
struct tm *gmttime(const time_t *timer): ————将time_t值转换为表示GMT时间的字符串。
struct tm *localtime(const time_t *timer):————将time_t转换为表示本地时间的strunct tm结构。
time_t mktime(struct tm *timeptr):  ————将表示本地时间的struct tm转换为time_t。
char *asctime(const struct tm *timeptr): ————将struct tm转换为字符串形式("sun sep 16 01:03:53 1973\n\0")。
double difftime(time_t time1, time_t time2):  ————得到两个日历时之间的差值。
size_t strftime(char *s, size_t maxsize, const char *format, const struct tm *timer):  自定义把结构体tm的日期与时间信息转换为制定的格式。


 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值