(转)The Standard C Library 经典的基础(上)

 

The Standard C Library 经典的基础

 

C的标志库函数是学习和使用C语言的基础,是编写经典C程序的基础,是学习其他计算机知识的基础.C标志库中一共包含了15个头文件:

 

<assert.h> <ctype.h> <stdio.h> <stdlib.h> <string.h> <limits.h> <float.h> <time.h>

 

<math.h> <setjmp.h> <signal.h> <stdarg.h> <stddef.h> <errno.h> <locale.h>

 

1:<assert.h>

 

NDEBUG

 

     NDEBUG宏是调试开关,当使用#include NDEBUG时程序为非调试状态,这种状态下调试宏assert不起作用。

 

assert

 

     调试宏assert只有在程序处于调试状态下才发挥作用,它的使用形式如下:assert(expression);当条件为假时会在屏幕中输出如下的调试信息:“Assertion failed:expression, file xyz, line nnn”,其中xyp是assert所在的文件名,nnn为assert在该文件中的位置。

 

assert宏还有许多用法,请参看《Writing Clean Code》第二章设计并使用断言。

2:<stdio.h>

 

<stdio.h>下面的类型,宏,函数都是分类的

 

其他:

 

     size_t sizeof返回的值

 

 

 

     NULL    空指针

 

文件:

 

     FILE    文件的类型

 

     fpos_t 文件中指针的位置

 

 

 

     EOF     文件末尾<0

 

     FILENAME_MAX   文件名最大值>0

 

     FOPEN_MAX      同时打开文件的最大值>8

 

     SEEK_SET       文件头

 

     SEEK_CUR        文件当前位置

 

     SEEK_END       文件末尾

 

 

 

打开文件

 

FILE *fopen(const char *filename,const char *mode);

 

     更改当前流相关的文件

 

     FILE *freopen(const char *filename,const char *mode,FILE *stream);

 

关闭文件

 

     int fclose(FILE *stream);

 

 

 

     清除流中的错误标志或文件末尾标志

 

     void clearerr(FILE *stream);

 

     测试流上的文件末尾标志

 

     int feof(FILE *stream);

 

     测试流上的错误标志

 

     int ferror(FILE *stream);

 

 

 

     将一个字符放回到流中

 

     int ungetc(int c, FILE *stream);

 

     从流中读一个字符

 

     int fgetc(FILE *stream);

 

     int getc(FILE *stream);

 

写一个字符到一个流

 

     int fputc(int c, FILE *stream);

 

     int putc(int c, FILE *stream);

 

     从流中获取一个字符串

 

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

 

     写一个字符串到一个流

 

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

 

     打印一个格式化数据到一个流

 

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

 

     使用一个参量列表指针格式化到流的数据

 

     int vfprintf(FILE *stream,const char *format, va_list ap);

 

     从一个流中读取格式化数据

 

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

 

   

 

     从一个流中读数据

 

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

 

     写数据到一个流

 

     int fwrite(const char *buffer, size_t size, size_t count,

 

FILE *stream);

 

 

 

     获取流的文件位置指示符

 

     int fgetpos(FILE *stream, fpos_t *pos);

 

     设置流位置指示符

 

     int fsetpos(FILE *stream, const fpos_t *pos);

 

     移动文件指针到一个指定的位置

 

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

 

     获得文件指针相对于文件头的偏移量

 

     long ftell(FILE *stream);

 

     重新定位一个文件指针到文件开头

 

     void rewind(FILE *steam);

 

 

 

     删除一个文件

 

     int remove(const char *path);

 

     更改一个文件或目录

 

     int rename(const char *oldname, const char *newname);

 

     缓冲区:

 

            _IOFBF

 

            _IOLBF

 

            _IONBF         缓冲区类型

 

            BUFSIZE         缓冲区尺寸>=256

 

 

 

     刷新一个流并清空与流相关的缓冲区的内容

 

     int fflush(FILE *stream);

 

     控制流的缓冲区,已经被setvbuf代替

 

     void setbuf(FILE *stream, char *buffer);

 

     控制流的缓冲区类型和缓冲区大小

 

     int setvbuf(FILE *stream, char *buffer, int mode, size_t size);

 

 

 

     将一个格式化数据写入一个字符串

 

     int sprintf(char *buffer, const char *format, ...);

 

     从字符串中读格式化数据

 

     int sscanf(const char *buffer, const char *format, ...);

 

     从参量列表指针格式化到字符串

 

     int vsprintf(char *buffer, const char *format, va_list ap);

 

临时文件

 

        L_tmpnam    临时文件名长度>0

 

        TMP_MAX     产生唯一文件名的最大数目>=25

 

 

 

以二进制读写的方式建立一个临时文件

 

FILE *tmpfile(void);

 

建立一个临时文件名

 

char *tmpname(char *string);

 

     标准流:

 

            stdin   标准输入流

 

            stdout 标准输出流

 

            stderr 标准错误输出流

 

   

 

     从stdin获得一个字符

 

     int getchar(void);

 

     把字符写道stdout

 

     int putchar(int c);

 

 

 

     从stdin中获取一行

 

     char *gets(char *buffer);

 

     写一个字符串到stdout

 

     int puts(const char *string);

 

 

 

     打印一个错误消息到stderr

 

     void perror(const char *error);

 

 

 

     打印格式化数据到stdout

 

     int printf(const char *format, ...);

 

     从stdin读格式化数据

 

     int scanf(const char *format, ...);

 

     从参量列表指针格式化到stdout

 

     int vprintf(const char *format, va_list ap);

3:<stdlib.h>

 

     <stdlib.h>中定义的函数都是工具类的函数可以分类学习

 

     其他:

 

        NULL

 

        size_t

 

   

 

     执行一个系统命令

 

     int system(const char *command);

 

     程序控制:

 

        EXIT_SUCCESS

 

        EXIT_FAILURE   exit函数的推出参数

 

      

 

     终止当前进程并返回一个错误代码

 

     void abort(void);

 

     在推出时执行指定的函数

 

     int atexit(void(*func)(void));

 

     终止调用进程

 

     void exit(int status);

 

   

 

     数学工具:

 

        div_t   函数div的返回类型

 

        ldiv_t 函数ldiv的返回类型

 

 

 

        RAND_MAX    rand函数返回的最大值

 

      

 

     产生一个伪随机数

 

     int rand(void);

 

     设置一个随机起始点

 

     void srand(unsigned int seed);

 

 

 

     计算绝对值

 

     int abs(int i);

 

     计算一个long整数的绝对值

 

     long labs(long l);

 

 

 

     执行一个快速排序

 

     void qsort(void *base, size_t count, size_t size,

 

               int (*compare)(const void *elem1, const void *elem2));

 

     执行一个排序数组的二叉查找

 

     void *bsearch(const void *key, const void *base,

 

size_t count, size_t size,

 

int(*compare)(const void *elem1,const void *elem2)

 

);

 

     计算两个数的商与余数

 

     div_t div(int number, int denom);

 

     计算两个long整数的商和余数

 

     ldiv_t ldiv(long number, long denom);

 

   

 

     字符/字符串工具

 

        wchar_t     宽字符宽度

 

       

 

        MB_CUR_MAX 多字节字符中的最大字节数

 

 

 

     将字符串转换成双精度

 

     double atof(const char *string);

 

     将字符串转换成整数

 

     int atoi(const char *string);

 

     将字符串转换成长整形

 

     long atol(const char *string);

 

     把字符串转换成一个双精度值

 

     double strtod(const char *string, char **endptr);

 

     把字符串转换成长整形

 

     long strtol(const char *string, char **endptr, int base);

 

     把字符串转换成无符号长整形

 

     unsigned long strtoul(const char *string, char **endptr, int base);

 

 

 

     获取长度和确定一个多字节字符的有效性

 

     int mblen(const char *s, size_t count);

 

     将一个多字节字符序列转换成宽字符序列

 

     size_t mbstowcs(wchar_t *wcstr, const char *mbstr, size_t count));

 

     将一个多字节字符转换成对应的宽字符

 

     int mbtowc(wchar_t *wchar, const char *mbchar, size_t count));

 

     将一个宽字符序列转换成一个多字节字符序列

 

     size_t wcstombs(char *mbstr, wchar_t *wcstr, size_t count));

 

     将一个宽字符转换成一个多字节字符

 

     int wctomb(char *mbchar, wchar_t wchar);

 

   

 

     内存管理工具:

 

     分配内存块

 

     void *malloc(size_t size);

 

     在内存中分配一个数组并初始化为0

 

     void *calloc(size_t count, size_t size);

 

     重新分配内存块

 

     void *recalloc(void *memblock, size_t size);

 

     释放一块内存

 

     void free(void *memblock);

 

     环境工具:

 

     从当前环境中取得一个值

 

     char *getenv(const char *varname);

4 <ctype.h>

 

<ctype.h>头文件中定义了有关于字符操作的函数

 

 

 

判断一个字符是否为控制字符(0x00 ~ 0x1f 或 0x7f)

 

int iscntrl(int c);

 

判断一个字符是否为空白字符(0x09 ~ 0x0d 或 0x20)

 

int isspace(int c);

 

判断一个字符是否为可打印字符(0x20 ~ 0x7e)

 

int isprint(int c);

 

判断一个字符是否为非空格的其他可打印字符(0x21 ~ 0x7e)

 

int isgraph(int c);

 

判断一个字符是否为标点字符

 

int ispunct(int c);

 

判断一个字符是否为字母数字字符

 

int isalnum(int c);

 

判断一个字符是否为十进制数字字符

 

int isdigit(int c);

 

判断一个字符是否为十六进制数字字符

 

int isxdigit(int c);

 

判断一个字符是否为字母字符

 

int isalpha(int c);

 

判断一个字符是否为大写字母字符

 

int isupper(int c);

 

判断一个字符是否为小写字母字符

 

int islower(int c);

 

 

 

转换字符为小写

 

int tolower(int c);

 

转换字符为大写

 

int toupper(int c);

5<string.h>:

 

     <string.h>中声明的函数都是关于c字符串和内存操作的函数

 

     其他:

 

     NULL

 

     size_t

 

     内存操作:

 

     查找内存块中的一个字符

 

     void *memchr(const void *buffer, int c, size_t count);

 

     比较两个内存块中的字符

 

     int memcmp(const void *buffer1,const void *buffer2,size_t count);

 

     在在内存块之间拷贝字节

 

     void *memcpy(void *dest, const void *src, size_t count);

 

     移动内存块

 

     void *memmove(void *dest, const void *src, size_t count);

 

     用指定的字符填充内存

 

     void *memset(void *dest, int c, size_t count);

 

 

 

对于以上的函数中的size_t count项使用需注意了

 

当你按如下方式使用是错误的

 

str = (char *)malloc(sizeof(char)*81);

 

strp = (char *)memchr(str, ‘u’, sizeof(str));

 

free(str);

 

这是错误的str是指针它的长度不是整个字符串的长度,所以strp得不到正确的结果

 

应改为一个确定的数或者是实际数组的长度如strlen(str).

 

 

 

     字符串操作:

 

     字符串拼接

 

     char *strcat(char *dest, const char *src);

 

     向一个字符串末尾添加指定长度的字符串

 

     char *strncat(char *dest, const char *src, size_t n);

 

 

 

     在字符串中查找一个字符

 

     char *strchr(const char *str, int c);

 

     在一个字符串中查找一个字符最后一次出现

 

     char *strrchr(const char *str, int c);

 

 

 

     比较字符串

 

     int strcmp(const char *str1, const char *str2);

 

     比较两个字符串中指定长度的子串的大小

 

     int strncmp(const char *str1, const char *str2, size_t n);

 

 

 

     使用指定场所的信息比较字符串

 

     int strcoll(const char *str1, const char *str2);

 

     基于指定场所转换一个字符串

 

     size_t strxfrm(char *dest, const char *src, size_t n);

 

 

 

     拷贝一个字符串

 

     char *strcpy(char *dest, const char *src);

 

     将源字符串中指定长度的子串拷贝到目的串中

 

     char *strncpy(char *dest, const char *src, size_t n);

 

 

 

     查找一个子串

 

     char *strstr(const char *string, const char *str);

 

     查找string包含str中包含的字符的长度,例如:

 

     string = “cabbage”; str = “abc”; return value = 5;

 

string = “cab bage”; str = “abc”; return value = 3;

 

string = “cafbbage”; str = “abc”; return value = 2;

 

string = “vcabbage”; str = “abc”; return value = 0;

 

     size_t strspn(const char *string, const char *str);

 

     在一个字符串中查找另一字符串的任意字符第一次出现的下标例如

 

     string = “cabbage”; str = “ag”; return value = 1;

 

     string = “xcabbage”; str = “ag”; return value = 2;

 

     size_t strcspn(const char *string, const char *str);

 

     返回在string中出现str字符集中的第一个字符的位置例如:

 

     string = “kdkow adkf akkei”;str = “aeiw”;

 

     return value = “w adkf akkei”;

 

     char *strpbrk(const char *string, const char *str);

 

     查找字符串中下一个语言符号

 

     所谓的语言符号就是指用户定义的表示一个意义的整体,string是字符串,str是包含分割语言符合的分隔符的集合.使用方法例如:

 

     token = strtok(string,str);

 

     while(token != NULL)

 

{

 

     puts(token);

 

     token = strtok(NULL, str);

 

}

 

 

string = “kks\niiwo jfie\twlk,diwpob.owf’ksif\nli”;

 

str = “ \n\t,.’”;

 

结果为:

 

kks

 

iiwo

 

jfie

 

wlk

 

diwpob

 

owf

 

ksif

 

li

 

 

str = “w”;

 

结果为:

 

kks\nii

 

o jfie\t

 

lk,di

 

pob.o

 

f’ksif\nli

 

     char *strtok(char *string, const char *str);

 

 

 

     通过系统错误编号来获得系统错误消息

 

     char *strerror(int errorcode);

 

     获取字符串有效长度(不包括’\0’)

 

     size_t strlen(const char *str);

6<limits.h>:

 

<limits.h> 中定义了整形的各种形式的边界值

 

char

 

CHAR_BIT    一个char占的位数

 

MB_LEN_MAX 多字节中char占的字节数

 

 

 

CHAR_MAX

 

CHAR_MIN

 

 

 

SCHAR_MAX

 

SCHAR_MIN

 

 

 

 

 

 

UCHAR_MAX

 

short

 

SHRT_MAX

 

SHRT_MIN

 

 

 

USHRT_MAX

 

int

你可能感兴趣的:((转)The Standard C Library 经典的基础(上))