[嵌入式C][入门篇] 快速掌握基础5 (标准库)
2024-01-08 21:37:45
开发环境:
文章目录
一、 简介
C 标准库是一组 C 内置函数、常量和头文件。
嵌入式软件常用: <stdio.h>、<stdint.h>、<string.h>、<stdlib.h>、<stdbool.h>、<math.h>等等。
二、 #include <stdio.h>
stdio .h 头文件定义了三个变量类型、一些宏和各种函数来执行输入和输出。
1. 库变量 (常用)
序号 | 变量 | 描述 |
---|---|---|
1 | size_t | 这是无符号整数类型,它是 sizeof 关键字的结果。 |
2. 库宏(常用)
序号 | 宏 | 描述 |
---|---|---|
1 | NULL | 这个宏是一个空指针常量的值。(常用) |
3. 库函数 (常用)
序号 | 函数 | 描述 |
---|---|---|
1 | int sprintf(char *str, const char *format, …) | 发送格式化输出到字符串。 |
2 | int snprintf(char *str, size_t size, const char *format, …) | 格式字符串到 str 中。 |
3 | int printf(const char *format, …) | 发送格式化输出到标准输出。 |
三、 #include <stdint.h> 变量命名
名称 | 源头 | 描述 |
---|---|---|
int8_t | char | 字符 |
uint8_t | unsigned char | 无符号字符 |
int16_t | short | 短整型 |
uint16_t | unsigned short | 无符号短整型 |
int32_t | int | 整型 |
uint32_t | unsigned int | 无符号整型 |
int64_t | long long | 长整型 |
uint64_t | unsigned long long | 无符号长整型 |
四、 #include <string.h> 字符串相关
定义了一个变量类型、一个宏和各种操作字符数组的函数。
1. 库变量 (常用)
序号 | 变量 | 描述 |
---|---|---|
1 | size_t | 这是无符号整数类型,它是 sizeof 关键字的结果。 |
2. 库宏(常用)
序号 | 宏 | 描述 |
---|---|---|
1 | NULL | 这个宏是一个空指针常量的值。 |
3. 库函数
序号 | 函数 | 描述 | 使用情况 |
---|---|---|---|
1 | void *memchr(const void *str, int c, size_t n) | 在参数 str 所指向的字符串的前 n 个字节中搜索第一次出现字符 c(一个无符号字符)的位置。 | |
2 | int memcmp(const void *str1, const void *str2, size_t n) | 把 str1 和 str2 的前 n 个字节进行比较。 | 常用 |
3 | void *memcpy(void *dest, const void *src, size_t n) | 从 src 复制 n 个字符到 dest。 | 常用 |
4 | void *memmove(void *dest, const void *src, size_t n) | 另一个用于从 src 复制 n 个字符到 dest 的函数。支持内存重叠! | 常用 |
5 | void *memset(void *str, int c, size_t n) | 复制字符 c(一个无符号字符)到参数 str 所指向的字符串的前 n 个字符。 | 常用 |
6 | char *strcat(char *dest, const char *src) | 把 src 所指向的字符串追加到 dest 所指向的字符串的结尾。 | 常用 |
7 | char *strncat(char *dest, const char *src, size_t n) | 把 src 所指向的字符串追加到 dest 所指向的字符串的结尾,直到 n 字符长度为止。 | 常用 |
8 | char *strchr(const char *str, int c) | 在参数 str 所指向的字符串中搜索第一次出现字符 c(一个无符号字符)的位置。 | |
9 | int strcmp(const char *str1, const char *str2) | 把 str1 所指向的字符串和 str2 所指向的字符串进行比较。不安全。 | 常用 |
10 | int strncmp(const char *str1, const char *str2, size_t n) | 把 str1 和 str2 进行比较,最多比较前 n 个字节。安全。 | 常用 |
11 | int strcoll(const char *str1, const char *str2) | 把 str1 和 str2 进行比较,结果取决于 LC_COLLATE 的位置设置。 | |
12 | char *strcpy(char *dest, const char *src) | 把 src 所指向的字符串复制到 dest。不安全 | |
13 | char *strncpy(char *dest, const char *src, size_t n) | 把 src 所指向的字符串复制到 dest,最多复制 n 个字符。安全 | 常用 |
16 | size_t strlen(const char *str) | 计算字符串 str 的长度,直到空结束字符,但不包括空结束字符。 | 常用 |
18 | char *strrchr(const char *str, int c) | 在参数 str 所指向的字符串中搜索最后一次出现字符 c(一个无符号字符)的位置。 | |
19 | size_t strspn(const char *str1, const char *str2) | 检索字符串 str1 中第一个不在字符串 str2 中出现的字符下标。 | |
20 | char *strstr(const char *haystack, const char *needle) | 在字符串 haystack 中查找第一次出现字符串 needle(不包含空结束字符)的位置。 | 常用 |
21 | char *strtok(char *str, const char *delim) | 分解字符串 str 为一组字符串,delim 为分隔符。 | 常用 |
五、 #include <stdlib.h> 功能函数相关
序号 | 函数 | 描述 |
---|---|---|
1 | double atof(const char *str) | 把参数 str 所指向的字符串转换为一个浮点数(类型为 double 型)。 |
2 | int atoi(const char *str) | 把参数 str 所指向的字符串转换为一个整数(类型为 int 型)。 |
3 | long int atol(const char *str) | 把参数 str 所指向的字符串转换为一个长整数(类型为 long int 型)。 |
4 | double strtod(const char *str, char **endptr) | 把参数 str 所指向的字符串转换为一个浮点数(类型为 double 型)。 |
5 | long int strtol(const char *str, char **endptr, int base) | 把参数 str 所指向的字符串转换为一个长整数(类型为 long int 型)。 |
6 | unsigned long int strtoul(const char *str, char **endptr, int base) | 把参数 str 所指向的字符串转换为一个无符号长整数(类型为 unsigned long int 型)。 |
7 | void *calloc(size_t nitems, size_t size) | 分配所需的内存空间,并返回一个指向它的指针。(内存清零) |
8 | void free(void *ptr) | 释放之前调用 calloc、malloc 或 realloc 所分配的内存空间。 |
9 | void *malloc(size_t size) | 分配所需的内存空间,并返回一个指向它的指针(内存内容随机)。 |
10 | void *realloc(void *ptr, size_t size) | 尝试重新调整之前调用 malloc 或 calloc 所分配的 ptr 所指向的内存块的大小。 |
11 | void abort(void) | 使一个异常程序终止。[Linux] |
12 | int atexit(void (*func)(void)) | 当程序正常终止时,调用指定的函数 func。[Linux] |
13 | void exit(int status) | 使程序正常终止。[Linux] |
14 | char *getenv(const char *name) | 搜索 name 所指向的环境字符串,并返回相关的值给字符串。[Linux] |
15 | int system(const char *string) | 由 string 指定的命令传给要被命令处理器执行的主机环境。[Linux] |
16 | void *bsearch(const void *key, const void *base, size_t nitems, size_t size, int (*compar)(const void *, const void *)) | 执行二分查找。 |
17 | void qsort(void *base, size_t nitems, size_t size, int (*compar)(const void , const void)) | 数组排序。 |
18 | int abs(int x) | 返回 x 的绝对值。 |
19 | div_t div(int numer, int denom) | 分子除以分母。 |
20 | long int labs(long int x) | 返回 x 的绝对值。 |
21 | ldiv_t ldiv(long int numer, long int denom) | 分子除以分母。 |
22 | int rand(void) | 返回一个范围在 0 到 RAND_MAX 之间的伪随机数。 |
23 | void srand(unsigned int seed) | 初始化随机数发生器,seed一般是用time(NULL)。 |
六、 #include 布尔类型 (bool)
1. 库变量 (常用)
序号 | 变量 | 描述 |
---|---|---|
1 | bool | true false |
七、 #include <math.h> 数学公式
序号 | 函数 | 描述 |
---|---|---|
1 | double acos(double x) | 返回以弧度表示的 x 的反余弦。 |
2 | double asin(double x) | 返回以弧度表示的 x 的反正弦。 |
3 | double atan(double x) | 返回以弧度表示的 x 的反正切。 |
4 | double atan2(double y, double x) | 返回以弧度表示的 y/x 的反正切。y 和 x 的值的符号决定了正确的象限。 |
5 | double cos(double x) | 返回弧度角 x 的余弦。 |
6 | double cosh(double x) | 返回 x 的双曲余弦。 |
7 | double sin(double x) | 返回弧度角 x 的正弦。 |
8 | double sinh(double x) | 返回 x 的双曲正弦。 |
9 | double tanh(double x) | 返回 x 的双曲正切。 |
10 | double exp(double x) | 返回 e 的 x 次幂的值。 |
11 | double frexp(double x, int *exponent) | 把浮点数 x 分解成尾数和指数。返回值是尾数,并将指数存入 exponent 中。所得的值是 x = mantissa * 2 ^ exponent。 |
12 | double ldexp(double x, int exponent) | 返回 x 乘以 2 的 exponent 次幂。 |
13 | double log(double x) | 返回 x 的自然对数(基数为 e 的对数)。 |
14 | double log10(double x) | 返回 x 的常用对数(基数为 10 的对数)。 |
15 | double modf(double x, double *integer) | 返回值为小数部分(小数点后的部分),并设置 integer 为整数部分。 |
16 | double pow(double x, double y) | 返回 x 的 y 次幂。 |
17 | double sqrt(double x) | 返回 x 的平方根。 |
18 | double ceil(double x) | 返回大于或等于 x 的最小的整数值。 |
19 | double fabs(double x) | 返回 x 的绝对值。 |
20 | double floor(double x) | 返回小于或等于 x 的最大的整数值。 |
21 | double fmod(double x, double y) | 返回 x 除以 y 的余数。 |
八、 #include <limits.h> 各种变量类型的范围
1. 库宏(常用)
宏 | 值 | 描述 |
---|---|---|
CHAR_BIT | 8 | 定义一个字节的比特数。 |
SCHAR_MIN | -128 | 定义一个有符号字符的最小值。 |
SCHAR_MAX | 127 | 定义一个有符号字符的最大值。 |
UCHAR_MAX | 255 | 定义一个无符号字符的最大值。 |
CHAR_MIN | 0 | 定义类型 char 的最小值,如果 char 表示负值,则它的值等于 SCHAR_MIN,否则等于 0。 |
CHAR_MAX | 127 | 定义类型 char 的最大值,如果 char 表示负值,则它的值等于 SCHAR_MAX,否则等于 UCHAR_MAX。 |
MB_LEN_MAX | 1 | 定义多字节字符中的最大字节数。 |
SHRT_MIN | -32768 | 定义一个短整型的最小值。 |
SHRT_MAX | +32767 | 定义一个短整型的最大值。 |
USHRT_MAX | 65535 | 定义一个无符号短整型的最大值。 |
INT_MIN | -2147483648 | 定义一个整型的最小值。 |
INT_MAX | 2147483647 | 定义一个整型的最大值。 |
UINT_MAX | 4294967295 | 定义一个无符号整型的最大值。 |
LONG_MIN | -9223372036854775808 | 定义一个长整型的最小值。 |
LONG_MAX | 9223372036854775807 | 定义一个长整型的最大值。 |
ULONG_MAX | 1.8446744e+19 | 定义一个无符号长整型的最大值。 |
九、 #include <signal.h> 原子变量(中断和多线程)
定义了一个变量类型 sig_atomic_t,可实现同步操作。
1. 库变量 (常用)
序号 | 变量 | 描述 |
---|---|---|
1 | sig_atomic_t | 这是 int 类型,在信号处理程序中作为变量使用。 它是一个对象的整数类型,该对象可以作为一个原子实体访问, 即使存在异步信号时,该对象可以作为一个原子实体访问。 |
2. 库宏(常用)
void (*signal(int sig, void (*func)(int)))(int)
宏(参数func) | 描述 |
---|---|
SIG_DFL | 默认的信号处理程序。 |
SIG_ERR | 表示一个信号错误。 |
SIG_IGN | 忽视信号。 |
宏(raise的参数) | 描述 |
---|---|
SIGABRT | 程序异常终止。 |
SIGFPE | 算术运算出错,如除数为 0 或溢出。 |
SIGILL | 非法函数映象,如非法指令。 |
SIGINT | 中断信号,如 ctrl-C。 |
SIGSEGV | 非法访问存储器,如访问不存在的内存单元。 |
SIGTERM | 发送给本程序的终止请求信号。 |
3. 库函数 (常用)
序号 | 函数 | 描述 |
---|---|---|
1 | void (*signal(int sig, void (*func)(int)))(int) | 该函数设置一个函数来处理信号,即信号处理程序。 |
2 | int raise(int sig) | 该函数会促使生成信号 sig。sig 参数与 SIG 宏兼容。 |
十、 #include <stdarg.h> 可变参数
1. 库变量 (常用)
序号 | 变量 | 描述 |
---|---|---|
1 | va_list | 这是一个适用于 va_start()、va_arg() 和 va_end() 这三个宏存储信息的类型。 |
2. 库函数 (常用)
序号 | 函数 | 描述 |
---|---|---|
1 | void va_start(va_list ap, last_arg) | 这个宏初始化 ap 变量,它与 va_arg 和 va_end 宏是一起使用的。last_arg 是最后一个传递给函数的已知的固定参数,即省略号之前的参数。 |
2 | type va_arg(va_list ap, type) | 这个宏检索函数参数列表中类型为 type 的下一个参数。 |
3 | void va_end(va_list ap) | 这个宏允许使用了 va_start 宏的带有可变参数的函数返回。如果在从函数返回之前没有调用 va_end,则结果为未定义。 |
十一、 #include <time.h> 可变参数
1. 库变量 (常用)
序号 | 变量 | 描述 |
---|---|---|
1 | size_t | 是无符号整数类型,它是 sizeof 关键字的结果。 |
2 | clock_t | 这是一个适合存储处理器时间的类型。 |
3 | time_t is | 这是一个适合存储日历时间的类型。 |
4 | struct tm | 这是一个用来保存时间和日期的结构。 struct tm { int tm_sec; // 秒,范围从 0 到 59 int tm_min; // 分,范围从 0 到 59 / int tm_hour; // 小时,范围从 0 到 23 int tm_mday; //一月中的第几天,范围从 1 到 31 int tm_mon; // 月,范围从 0 到 11 int tm_year; // 自 1900 年起的年数 int tm_wday; // 一周中的第几天,范围从 0 到 6 int tm_yday; // 一年中的第几天,范围从 0 到 365 int tm_isdst; // 夏令时 }; |
2. 库宏(常用)
宏(参数func) | 描述 |
---|---|
1 | NULL |
2 | CLOCKS_PER_SEC |
3. 库函数 (常用)
序号 | 函数 | 描述 |
---|---|---|
1 | char *asctime(const struct tm *timeptr) | 返回一个指向字符串的指针,它代表了结构 timeptr 的日期和时间。 |
2 | clock_t clock(void) | 返回程序执行起(一般为程序的开头),处理器时钟所使用的时间。 |
3 | char *ctime(const time_t *timer) | 返回一个表示当地时间的字符串,当地时间是基于参数 timer。 |
4 | double difftime(time_t time1, time_t time2) | 返回 time1 和 time2 之间相差的秒数 (time1-time2)。 |
5 | struct tm *gmtime(const time_t *timer) | timer 的值被分解为 tm 结构,并用协调世界时(UTC)也被称为格林尼治标准时间(GMT)表示。 |
6 | struct tm *localtime(const time_t *timer) | timer 的值被分解为 tm 结构,并用本地时区表示。 |
7 | time_t mktime(struct tm *timeptr) | 把 timeptr 所指向的结构转换为一个依据本地时区的 time_t 值。 |
8 | size_t strftime(char *str, size_t maxsize, const char *format, const struct tm *timeptr) | 根据 format 中定义的格式化规则,格式化结构 timeptr 表示的时间,并把它存储在 str 中。 |
9 | time_t time(time_t *timer) | 计算当前日历时间,并把它编码成 time_t 格式。 |
文章来源:https://blog.csdn.net/qq_29246181/article/details/135443279
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。 如若内容造成侵权/违法违规/事实不符,请联系我的编程经验分享网邮箱:veading@qq.com进行投诉反馈,一经查实,立即删除!
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。 如若内容造成侵权/违法违规/事实不符,请联系我的编程经验分享网邮箱:veading@qq.com进行投诉反馈,一经查实,立即删除!