七、C语言标准库

        很多嵌入式工程师,基本都了解<stdio.h>,但C中除了这个还有很多其他标准库文件,今天主要介绍常用的C语言库,如<ctype.h>、<math.h>、<mem.h>、<stdlib.h>及<string.h>等

目录

一、    #include <assert.h>

二、    #include <ctype.h>

三、    #include <float.h>

四、    #include <io.h>

五、    #include <math.h>

六、    #include <mem.h>

七、    #include <setjmp.h>

八、    #include <stdio.h>

九、    #include <stdlib.h>

十、    #include <signal.h>

十一、#include <string.h>

十二、#include <time.h>

十三、#include <errno.h>

十四、#include <limits.h>


一、#include<assert.h>

1.函数原型: void assert( int expression );//如果expression结果为真,则继续执行,否则通过调用abort直接来终止程序的运行。

2.频繁的调用会极大的影响程序的性能,增加额外的开销。在调试结束后,可以通过在包含#include <assert.h>的语句之前插入 #define NDEBUG 来禁用assert调用。

二、#include<ctype.h>

用于测试字符是否属于特定的字符类别

1.C语言isascii()函数:判断字符是否为ASCII码

2.C语言isalnum()函数:判断字符是否为字母或数字

3.C语言isalpha()函数:判断字符是否为英文字母

4.C语言iscntrl()函数:判断字符是否为控制字符//控制字符的 ASCII 编码介于 0和 31之间,以及 127

5.C语言ispunct()函数: 判断字符是否为标点符号

6.C语言isspace()函数:判断字符是否为空白字符

7.C语言isdigit()函数:判断字符是否为十进制数字

8.C语言isxdigit()函数:判断字符是否为十六进制数字

9.C语言isgraph()函数:判断字符是否除空格外的可打印字符

10.C语言isprint()函数:判断字符是否为可打印字符(含空格)

11.C语言islower()函数:判断字符是否为小写英文字母

12.C语言isupper()函数:判断字符是否为大写英文字母

13.C语言toascii()函数:把一个字符转换为ASCII

14.C语言tolower()函数:把大写字母转换为小写字母

15.C语言toupper()函数:把小写字母转换为大写字母

三、#include<float.h>

在linux中测试了下,下面的几个函数都没有链接成功

1.C语言_clear87()函数:获取并清除状态字

2.C语言_control87()函数:获取和设置浮点控制字

3.C语言_status87()函数:获取浮点处理器状态值

四、#include<io.h>

<io.h>头文件这一章主要介绍与和缓冲区相关的文件读写函数,以文件的方式处理文件

1.C语言access()函数:确定文件的访问权限

2.C语言chmod()函数:用于改变文件访问方式

3.C语言open()函数:打开一个文件

access和mode的可取值通常在FCNTL.h里面定义

access的可取值如下:

        #define O_RDONLY           1

        #define O_WRONLY          2

        #define O_RDWR              4

access还可以是以下flag及它们之间的组合而得到的性质:

        #define O_CREAT          0x0100     /* create and open file */

        #define O_TRUNC         0x0200     /* open with truncation */

        #define O_EXCL             0x0400     /* exclusive open */

        #define O_APPEND        0x0800     /* to end of file */

        #define O_CHANGED    0x1000     /* user may read these bits, but     */

        #define O_DEVICE         0x2000     /* only RTL\io functions may touch.     */

        #define O_TEXT             0x4000     /* CR-LF translation     */

        #define O_BINARY         0x8000     /* no translation     */

mode的可取值在sys\stat.h里面定义,也可以是它们的组合,如下:

        #define S_IREAD     0x0100     /* owner may read */

        #define S_IWRITE   0x0080     /* owner may write */

access使用O_CREAT的时候,必须指定mode参数。

如:open(s[i], 0x0100,0x0080);的意思是以O_CREAT和可写的方式打开s[i]中指出的文件,如果文件不存在,就创建它。返回这个文件的低级句柄。

4.C语言close()函数:用于关闭由open()函数所打开的文件

5.C语言creat()函数:创建指定文件名的文件

auth的可取值如下:

        #define O_RDONLY          1

        #define O_WRONLY         2

        #define O_RDWR             4

6.C语言eof()函数:检查文件是否结束

7.C语言fdopen()函数:将流与文件句柄连接,返回FILE *

8.C语言filelength()函数:统计由open()函数所打开的文件的字节数

9.C语言isatty()函数:检查给定的设备类型

常用设备名:

        stdin     标准输入设备  键盘

        stdout  标准输出设备  显示器

        stderr   标准错误设备 

        stdaux  辅助设备

        stdprn  打印机

10.C语言read()函数:用于读取打开文件的内容

11.C语言write()函数:写文件

12.C语言lseek()函数:用于移动打开文件的指针

13.C语言tell()函数:获取打开文件的指针位置

五、#include<math.h>

<math.h>头文件中声明了常用的一些数学相关的运算函数,比如乘方,开方、指数、三角函数等运算。

1.C语言abs()函数:求整数的绝对值

2.C语言fabs()函数:求浮点数的绝对值

3.C语言labs()函数:取长整型绝对值

4.C语言acos()函数:求余弦值为 x 的弧度数

5.C语言asin()函数:求正弦值为 x 的弧度数

6.C语言atan()函数:求正切值为 x 的弧度数

7.C语言atan2()函数:计算Y/X的反正切值

8.C语言ceil()函数:向上舍入

9.C语言floor()函数:向下舍入

10.C语言exp()函数:求底数e的x次方

11.C语言pow()函数:指数函数(x的y次方)

12.C语言sqrt()函数:计算一个非负实数的平方根

13.C语言sin()函数:正弦函数

14.C语言cos()函数:余弦函数

15.C语言tan()函数:正切函数

16.C语言cosh()函数:计算双曲余弦值

17.C语言sinh()函数:求出指定值的双曲正弦值

18.C语言tanh()函数:计算双曲正切值

19.C语言log10()函数:求指定数值的以10为底数的对数

20.C语言log()函数:求以自然数为底数的对数

21.C语言modf()函数:求双精度数的小数部分

22.C语言fmod()函数:计算x对y的模, 即x/y的余数

23.C语言frexp()函数:把一个双精度数分解为尾数和指数

24.C语言hypot()函数:计算直角三角形的斜边长度

25.C语言ldexp()函数:计算指定的2^exp倍数

六、#include<mem.h>

<mem.h>头文件这一章主要介绍C语言或C++中,与内存处理相关的函数,如字符串的拷贝、比较、移动等等

1.C语言memccpy()函数:从sour中拷贝m个字节到目标des,遇到字符c便停止复制

2.C语言memcpy()函数:从suc中拷贝m个字节到目标des

3.C语言memmove()函数:从源区域移动m个字节到目标区域

备注:memcpy()memmove()的区别:

如果源地址和目标地址没有重叠,那么在性能上,memcpy函数通常比memmove函数更高效。

如果源地址和目标地址有重叠(比如将一个字符串的前半部分放到后半部分的后面),或者你无法确定是否存在重叠时,应该使用memmove函数,以确保数据的正确性

4.C语言memchr()函数:对字符c搜索s区域的前m个字节

5.C语言memcmp()函数:比较m字节长的两个字符串s1和s2

6.C语言memicmp()函数:比较s1和s2的前m个字节,忽略字符的大小写

7.C语言memset()函数:置s中的所有字节为c

七、#include<setjmp.h>

1.C语言setjmp()函数:非局部转移进程,将当前系统堆栈信息保存在变量buf中,为longjmp设置跳转点

2.C语言longjump()函数:执行非局部转移进程,longjmp函数进行非局部跳转,执行到longjmp时,程序跳转到setjmp函数中进行判断,并输出结果

#include<stdio.h>

#include<setjmp.h>

#include<stdlib.h>

void subroutine(jmp_buf);

int main(void){

   int value;

   jmp_buf jumper;

   value = setjmp(jumper);

   if (value != 0)   {

      printf("Longjmp with value %d\n", value);

      exit(value);

   }

   printf("About to call subroutine ... \n");

   subroutine(jumper);

   return 0;

}

void subroutine(jmp_buf jumper)  {

   longjmp(jumper,1);

}

八、#include<stdio.h>

以流的方式处理文件,类似c++中的fstream

1.C语言clearerr()函数:复位错误标志

2.C语言ferror()函数:检测流上的错误

3.C语言fopen()函数:打开一个流

4.C语言fclose()函数:关闭流 stream

5.C语言feof()函数:检测流上的文件结束符

6.C语言fflush()函数:清除一个流

7.C语言fgetc()函数:从流中读取字符

8.C语言fgetchar()函数:从标准输入流中读取字符,从控制台中读取字符

9.C语言fgetpos()函数:取得当前文件指针(句柄),返回当前文件中指针(鼠标)的位置

10.C语言fgets()函数:从流中读取一字符串,注意在末尾保留换行符

11.C语言fprintf()函数:格式化输出到一个流中

12.C语言fputchar()函数:送一个字符到标准输出流

13.C语言fputs()函数:送一个字符到一个流中

14.C语言fread()函数:从一个流中读数据

15.C语言freopen()函数:替换一个流

int main(void)

{

   if (freopen("D:\\out.txt", "w", stdout)== NULL)

{

      fprintf(stderr, "error redirecting stdout\n");

 }

   printf("www.dotcpp.com\n"); //原本要在控制台中输出的字符串,输出到了文件中

   fclose(stdout);

   return 0;

}

16.C语言fscanf()函数:从一个流中执行格式化输入

17.C语言fseek()函数:重定位流上的文件指针

18.C语言fsetpos()函数:将文件指针定位在指定的位置上

19.C语言ftell()函数:偏移量是从文件开始算起的字节数

20.C语言fwrite()函数:写内容到流中

21.C语言getc()函数:从指定的流 stream 获取下一个字符

22.C语言getchar()函数:从标准输入流stdin流中读字符

23.C语言getche()函数:从控制台取字符

24.C语言gets()函数:从输入流中取一字符串

25.C语言getw()函数:从流中取一整数

26.C语言perror()函数:输出系统错误信息

27.C语言printf()函数:产生格式化输出的函数

28.C语言putc()函数:输出一字符到指定流中

29.C语言putchar()函数:输出一字符到标准输出流stdout上

30.C语言puts()函数:把一个字符串写入到标准输出 stdout

31.C语言putw()函数:把一字符或字送到流中

32.C语言remove()函数:删除一个文件

33.C语言rename()函数:重命名文件

34.C语言rewind()函数:将文件指针重新指向一个流的开头,类似fsetpos(stream,0)

35.C语言ungetc()函数:把一个字符退回到输入流中

36.C语言ungetch()函数:把一个字符退回到键盘缓冲区中

37.C语言tmpfile()函数:以二进制方式打开暂存文件

38.C语言tmpnam()函数:创建一个唯一的文件名

39.C语言scanf()函数:从标准输入stdin执行格式化输入类似fscanf(stdin,scanf())

40.C语言setbuf()函数:把缓冲区与流相联

41.C语言setvbuf()函数:把缓冲区与流相关,将缓冲区与流实现指定大小,指定类型的关联

42.C语言sprintf()函数:格式化输出到字符串中

43.C语言sscanf()函数:执行从字符串中的格式化输入

九、#include<stdlib.h>

1.C语言abort()函数:写一个终止信息到stderr

2.C语言atexit()函数:用于注册终止

3.C语言atof()函数:将字符串转换为浮点值//对比c++中<string>中的stof()

4.C语言atoi()函数:将字符串转换成整型数//对比c++中<string>中的stoi()

5.C语言atol()函数:将字符串转换成长整型数//对比c++中<string>中的stoll()

6.C语言bsearch()函数:用于二分法搜索

7.C语言calloc()函数:用于分配堆内存

8.C语言div()函数:用于两个整数相除//结构体div_t中的quot表示商,rem表示余数

9.C语言ecvt()函数:把浮点数转换为字符串//对比c++中<string>中的to_string()

10.C语言fcvt()函数:将浮点数转换为字符串//对比c++中<string>中的to_string()

11.C语言exit()函数:用于正常终止程序

12.C语言gcvt()函数:把浮点数转换为字符串//对比c++中<string>中的to_string()

13.C语言free()函数:用于释放已分配的内存块

14.C语言getenv()函数:用于获取当前环境中的字符串

15.C语言itoa()函数:用于把整数转换成字符串//对比c++中<string>中的to_string()

16.C语言ldiv()函数:用于两个长整型数相除

17.C语言lfind()函数:用于在给定的区域内从头到尾进行线性搜索//对比c++中<algorithm>中的find()

18.C语言lsearch()函数:用于在给定的区域内从头到尾进行线性搜索

19.C语言realloc()函数:用于重新分配指定大小的堆内存空间

20.C语言malloc()函数:用于分配指定大小的堆内存

21.C语言putenv()函数:用于改变或增加环境变量的内容

备注:char* name的格式为name=vale;如,putenv("PATH=C::\\temp");//表示将环境变量PATH的值修改为C::\\temp。

22.C语言qsort()函数:用于对记录从小到大快速排序

#include<stdio.h>

#include<stdlib.h>

typedef int (*fc)(const void*,const void*);

int compare(const void* p1,const void* p2)

{

   return (*(int*)p1)-(*(int*)p2);

}

int main(void)

{

   int i,arr[10]={1,6,5,7,8,9,11,24,3,10};

   fc f=compare;

   qsort(arr,10,sizeof(int),f);

   for(i=0;i<10;i++)

{

      printf("%d\t",arr[i]);

}

   putchar('\n');

   return 0;

}

23.C语言rand()函数:用于生成随机数

24.C语言srand()函数:初始化随机数的发生器

25.strtod():将字符串转换为浮点数

26.C语言strtod()函数:将字符串转换为浮点数

27.C语言strtol()函数:将字符串换成长整型数

28.C语言swab()函数:从源和目标区域交换字节

29.C语言system()函数:发出一个DOS命令

十、#include<signal.h>

1.C语言raise()函数:向正在执行的程序发送一个信号

十一、#include<string.h>

介绍与字符串相关的函数

1.C语言strcpy()函数:拷贝一个字符串到另一个字符串数组中

2.C语言strcat()函数:将一个字符串拼接在目标字符串的后面

3.C语言strcmp()函数:比较两个字符串的大小

4.C语言strchr()函数:查找字符串中第一个出现的指定字符的位置

5.C语言strcmpi()函数:比较两个字符串的大小

6.C语言strcspn()函数:查找连续有几个字符都不属于字符串str2内的字符

7.C语言strspn()函数:计算字符串str1中连续有几个字符都属于字符串str2

8.C语言strdup()函数:将字符串复制到新建立的空间//类似先执行malloc,然后执行strcpy,因此最后需要自己手动free

9.C语言stricmp()函数:比较两个字符串大小

10.C语言strlen()函数:计算字符串长度//注意,此长度是不包括最后的"\0"的,比sizeof少1

11.C语言strlwr()函数:将字符串中的大写字母全部转换成小写形式

12.C语言strncat()函数:在字符串尾部追加

13.C语言strncmp()函数:对指定字符串数量的两个字符串进行比较

14.C语言strnicmp()函数:对指定长度的两个字符串进行比较

15.C语言strncpy()函数:将指定数量的源字符串拼接在目标字符串的后面

16.C语言strpbrk()函数:比较字符串str1和str2中是否有相同的字符

17.C语言strrev()函数:将字符串中的字符全部颠倒顺序//逆序

18.C语言strset()函数:将一个字符串中的所有字符都设为指定字符

19.C语言strstr()函数:在一个字符串中查找另一个字符串首次出现的位置

20.C语言strtok()函数:用指定的分隔符分解字符串//注意c++中的stringstream

//c strtok

#include<string.h>

#include<stdio.h>

int main(void)

{

   char input[50] = "I like www.dotcpp.com very much"; //注意不能是字符串指针

   char *p = strtok(input, " ");

   if(p)

{

      printf("%s\n", p);

}

   while(p=strtok(NULL, " "))//使用第一个参数为NULL来提取子串

{

      printf("%s\n", p);

}

   return 0;

}

//c++ stringstream

int main(int argc, char *argv[])

{

  std::ifstream input("1.txt");

  std::string abc;

  while (getline(input, abc))

  {

    std::stringstream line(abc);

    std::string word;

    while (line >> word)

    {

      std::cout << word << std::endl;

    }

    std::cout << std::endl;

  }

  input.close();

  return 0;

}

21.C语言strupr()函数:将字符串中的小写字母全部转换成大写形式

22.C语言strnset()函数:指定字符串的前几个字符都设为指定字符

23.C语言strrchr()函数:查找字符串中最后一次出现字符c的位置

十二、#include<time.h>

介绍与时间相关的函数,如获取系统时间、日期时间、处理器时间、以及相关数据类型的转换等等

1.C语言asctime()函数:将给定的日期和时间转换成ASCII码

struct *tm{

                    int tm_sec;         //秒

                    int tm_min;         //分

                    int tm_hour;        //时

                    int tm_mday;        //一个月份中的天数

                    int tm_mon;         //月份

                    int tm_year;        //年份

                    int tm_wday;        //星期

                    int tm_yday;        //一年中的天数

                    int tm_isdst;       // 夏令时标识符,实行夏令时的时候,tm_isdst为正。不实行夏令时的时候,tm_isdst为0;不了解情况时,tm_isdst()为负。

                    }

#include<time.h>

#include<stdio.h>

#include<string.h>

int main(void)

{

   struct tm t;

   char str[80];

   t.tm_sec = 1;

   t.tm_min = 30;

   t.tm_hour = 9;

   t.tm_mday = 22;

   t.tm_mon = 11; 

   t.tm_year = 56;

   t.tm_wday = 4;

   t.tm_yday = 0;     //不显示

   t.tm_isdst = 0;    //不实行夏令时

   strcpy(str, asctime(&t));

   printf("%s\n", str);

   return 0;

}

2.C语言clock()函数:确定处理器时间

3.C语言ctime()函数:把日期和时间转换为字符串

4.C语言time()函数:获取系统时间

5.C语言difftime()函数:计算两个时刻之间的时间差

6.C语言gmtime()函数:把clock中的时间转换为格林尼治标准时间

7.C语言localtime()函数:把日期和时间转变为结构体tm

8.C语言tzset()函数:对UNIX操作系统的时间兼容性

十三、#include<errno.h>

     定义了整数变量 errno,它是通过系统调用设置的,在错误事件中的某些库函数表明了什么发生了错误。该宏扩展为类型为 int 的可更改的左值,因此它可以被一个程序读取和修改。errno 是一个全局变量,用于存储最近发生的错误代码。这个变量的类型为 int。当一个库函数发生错误时,它通常会设置 errno 以指示错误类型。以下是一些常见的错误码,它们在 <errno.h> 中定义为宏:

EPERM:操作不允许

ENOENT:没有这样的文件或目录

ESRCH:没有这样的进程

EINTR:中断的系统调用

EIO:输入/输出错误

ENXIO:没有这样的设备或地址

E2BIG:参数列表太长

ENOMEM:内存不足

EACCES:权限被拒绝

EFAULT:坏的地址

EBUSY:资源忙

EEXIST:文件已存在

EXDEV:跨设备链接

ENODEV:没有这样的设备

ENOTDIR:不是一个目录

EISDIR:是一个目录

EINVAL:无效的参数

ENFILE:系统文件表溢出

EMFILE:打开的文件过多

ENOTTY:不是终端设备

ETXTBSY:文本文件忙

EFBIG:文件过大

ENOSPC:设备上没有空间

ESPIPE:非法的寻址

EROFS:只读文件系统

EMLINK:链接过多

EPIPE:管道破裂

#include <stdio.h>

#include <errno.h>

#include <string.h>

int main()

{

    FILE *file = fopen("nonexistent_file.txt", "r");

    if (file == NULL)

{

     printf("Error opening file: %s\n", strerror(errno));//通过 strerror 将 errno 转换为可读的字符串,便于调试和日志记录。

     return 1;

}

    // 文件处理代码

    fclose(file);

    return 0;

}

十四、#include<limits.h>

        定义了各种数据类型的限制。这些宏提供了有关整数类型(char、short、int、long 和 long long 等)和其他数据类型的最大值和最小值的信息。

宏                                          描述                                                           值

字符类型                

CHAR_BIT                char 类型的位数                                                通常为 8

CHAR_MIN               char 类型的最小值(有符号或无符号)            -128 或 0

CHAR_MAX              char 类型的最大值(有符号或无符号)           127 或 255

SCHAR_MIN             signed char 类型的最小值                                -128

SCHAR_MAX            signed char 类型的最大值                                127

UCHAR_MAX            unsigned char 类型的最大值                            255

短整数类型                

SHRT_MIN                short 类型的最小值                                        -32768

SHRT_MAX               short 类型的最大值                                        32767

USHRT_MAX            unsigned short 类型的最大值                         65535

整数类型                

INT_MIN                    int 类型的最小值                                        -2147483648

INT_MAX                   int 类型的最大值                                        2147483647

UINT_MAX                unsigned int 类型的最大值                         4294967295

长整数类型                

LONG_MIN                long 类型的最小值                                    -9223372036854775808L

LONG_MAX               long 类型的最大值                                   9223372036854775807L

ULONG_MAX            unsigned long 类型的最大值                   18446744073709551615UL

长长整数类型                

LLONG_MIN             long long 类型的最小值                            -9223372036854775808LL

LLONG_MAX            long long 类型的最大值                            9223372036854775807LL

ULLONG_MAX         unsigned long long 类型的最大值             18446744073709551615ULL

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值