C语言标准库函数

C 标准库
标准库<ctype.h>
C 标准库的 ctype.h 头文件提供了一些函数,可用于测试和映射字符。
这些函数接受 int 作为参数,它的值必须是 EOF 或表示为一个无符号字符。
如果参数 c 满足描述的条件,则这些函数返回非零(true)。如果参数 c 不满足描述的条件,则这些函数返回零。
1、库函数 - isalnum()
C 库函数 void isalnum(int c) 检查所传的字符是否是字母和数字。
函数的声明:int isalnum(int c);
c – 这是要检查的字符。如果 c 是一个数字或一个字母,则该函数返回非零值,否则返回 0。
2、库函数 - isalpha()
C 库函数 void isalpha(int c) 检查所传的字符是否是字母。
函数的声明:int isalpha(int c);
c – 这是要检查的字符。如果 c 是一个字母,则该函数返回非零值,否则返回 0。
3、库函数 - isdigit()
C 库函数 int isdigit(int c) 检查所传的字符是否是十进制数字字符。
十进制数字是:0 1 2 3 4 5 6 7 8 9
函数的声明:int isdigit(int c);
c – 这是要检查的字符。如果 c 是一个数字,则该函数返回非零值,否则返回 0。
4、库函数 - isxdigit()
C 库函数 int isxdigit(int c) 检查所传的字符是否是十六进制数字。
int isxdigit(int c) 参数 c 是单个字符。
十六进制一般用数字 0 到 9 和字母 A 到 F(或 a~f)表示,其中 A~F 表示 10~15: 0 1 2 3 4 5 6 7 8 9 a b c d e f A B C D E F。
函数的声明:int isxdigit(int c);
检查的字符c 如果是一个十六进制数字,则该函数返回非零的整数值,否则返回 0。
5、库函数 - isspace()
C 库函数 int isspace(int c) 检查所传的字符是否是空白字符。
标准的空白字符包括:

' '     (0x20)    space (SPC) 空格符
'\t'    (0x09)    horizontal tab (TAB) 水平制表符    
'\n'    (0x0a)    newline (LF) 换行符
'\v'    (0x0b)    vertical tab (VT) 垂直制表符
'\f'    (0x0c)    feed (FF) 换页符
'\r'    (0x0d)    carriage return (CR) 回车符

函数的声明:int isspace(int c);
要检查字符 c 如果是一个空白字符,则该函数返回非零值(true),否则返回 0(false)。
6、库函数 - islower()
C 库函数 int islower(int c) 检查所传的字符是否是小写字母。
函数的声明:int islower(int c);
要检查字符 c 如果是一个小写字母,则该函数返回非零值(true),否则返回 0(false)。
7、库函数 - isupper()
C 库函数 int isupper(int c) 检查所传的字符是否是大写字母。
函数的声明:int isupper(int c);
要检查字符 c 如果是一个大写字母,则该函数返回非零值(true),否则返回 0(false)。
标准库 - <limits.h>
limits.h 头文件决定了各种变量类型的各种属性。定义在该头文件中的宏限制了各种变量类型(比如 char、int 和 long)的值。
这些限制指定了变量不能存储任何超出这些限制的值,例如一个无符号可以存储的最大值是 255。
库宏:
INT_MIN -32768 定义一个整型的最小值。
INT_MAX +32767 定义一个整型的最大值。
标准库 - <stdio.h>
stdio .h 头文件定义了三个变量类型、一些宏和各种函数来执行输入和输出。
头文件 stdio.h 中定义的变量类型:
1、size_t :这是无符号整数类型,它是 sizeof 关键字的结果。
2、FILE :这是一个适合存储文件流信息的对象类型。
3、fpos_t :这是一个适合存储文件中任何位置的对象类型。
头文件 stdio.h 中定义的宏:
1、NULL:这个宏是一个空指针常量的值。
2、EOF :这个宏是一个表示已经到达文件结束的负整数。
头文件 stdio.h 中定义的函数:
1、int printf(const char *format, …):发送格式化输出到标准输出 stdout。
2、int scanf(const char *format, …):从标准输入 stdin 读取格式化输入。
标准库 - <stdlib.h>
stdlib .h 头文件定义了四个变量类型、一些宏和各种通用工具函数。
头文件 stdlib.h 中定义的变量类型:
1、size_t :这是无符号整数类型,它是 sizeof 关键字的结果。
2、wchar_t :这是一个宽字符常量大小的整数类型。
3、div_t :这是 div 函数返回的结构。
4、ldiv_t :这是 ldiv 函数返回的结构。
头文件 stdlib.h 中定义的宏:
1、NULL:这个宏是一个空指针常量的值。
2、RAND_MAX :这个宏是 rand 函数返回的最大值。
头文件 stdlib.h 中定义的函数:
1、int atoi(const char *str)
把参数 str 所指向的字符串转换为一个整数(类型为 int 型)。
该函数返回转换后的长整数,如果没有执行有效的转换,则返回零。
2、void *calloc(size_t nitems, size_t size)
分配所需的内存空间,并返回一个指向它的指针。
3、void free(void *ptr)
释放之前调用 calloc、malloc 或 realloc 所分配的内存空间。
4、void *malloc(size_t size)
分配所需的内存空间,并返回一个指向它的指针。
5、void *realloc(void *ptr, size_t size)
尝试重新调整之前调用 malloc 或 calloc 所分配的 ptr 所指向的内存块的大小。
6、int system(const char *string)
由 string 指定的命令传给要被命令处理器执行的主机环境。
7、void exit(int status)
使程序正常终止。
库函数 - bsearch()
C 库函数 void *bsearch(const void *key, const void *base, size_t nitems, size_t size, int (*compar)(const void *, const void *)) 对 nitems 对象的数组执行二分查找,base 指向进行查找的数组,key 指向要查找的元素,size 指定数组中每个元素的大小。
数组的内容应根据 compar 所对应的比较函数升序排序。

int compar(const void * a, const void * b)
{
   return ( *(int*)a - *(int*)b );
}

函数的声明:void *bsearch(const void *key, const void *base, size_t nitems, size_t size, int (*compar)(const void *, const void *))
参数:

key -- 指向要查找的元素的指针,类型转换为 void*。
base -- 指向进行查找的数组的第一个对象的指针,类型转换为 void*。
nitems -- base 所指向的数组中元素的个数。
size -- 数组中每个元素的大小,以字节为单位。
compar -- 用来比较两个元素的函数。

如果查找成功,该函数返回一个指向数组中匹配元素的指针,否则返回空指针。.
库函数 - qsort()
C 库函数 void qsort(void *base, size_t nitems, size_t size, int (*cmpfunc)(const void , const void)) 对数组进行排序。

int cmpfunc (const void * a, const void * b)
{
   return ( *(int*)a - *(int*)b );
}

函数的声明:void qsort(void *base, size_t nitems, size_t size, int (*cmpfunc)(const void *, const void*))
参数:

base -- 指向要排序的数组的第一个元素的指针。
nitems -- 由 base 指向的数组中元素的个数。
size -- 数组中每个元素的大小,以字节为单位。
compar -- 用来比较两个元素的函数。

该函数不返回任何值。
标准库 - <string.h>
string .h 头文件定义了一个变量类型、一个宏和各种操作字符数组的函数。
头文件 string.h 中定义的变量类型:
1、size_t :这是无符号整数类型,它是 sizeof 关键字的结果。
头文件 string.h 中定义的宏:
1、NULL:这个宏是一个空指针常量的值。
头文件 string.h 中定义的函数:
库函数 - memchr()
C 库函数 void *memchr(const void *str, int c, size_t n) 在参数 str 所指向的字符串的前 n 个字节中搜索第一次出现字符 c(一个无符号字符)的位置。
函数的声明:void *memchr(const void *str, int c, size_t n)
参数:

str -- 指向要执行搜索的内存块。
c -- 以 int 形式传递的值,但是函数在每次字节搜索时是使用该值的无符号字符形式。
n -- 要被分析的字节数。

该函数返回一个指向匹配字节的指针,如果在给定的内存区域未出现字符,则返回 NULL。
库函数 - memcmp()
C 库函数 int memcmp(const void *str1, const void *str2, size_t n)) 把存储区 str1 和存储区 str2 的前 n 个字节进行比较。
函数的声明:int memcmp(const void *str1, const void *str2, size_t n)
参数:

str1 -- 指向内存块的指针。
str2 -- 指向内存块的指针。
n -- 要被比较的字节数。

返回值:

如果返回值 < 0,则表示 str1 小于 str2。
如果返回值 > 0,则表示 str2 小于 str1。
如果返回值 = 0,则表示 str1 等于 str2。

库函数 - memcpy()
C 库函数 void *memcpy(void *str1, const void *str2, size_t n) 从存储区 str2 复制 n 个字节到存储区 str1。
函数的声明:void *memcpy(void *str1, const void *str2, size_t n)
参数:

str1 -- 指向用于存储复制内容的目标数组,类型强制转换为 void* 指针。
str2 -- 指向要复制的数据源,类型强制转换为 void* 指针。
n -- 要被复制的字节数。

该函数返回一个指向目标存储区 str1 的指针。
库函数 - memmove()
C 库函数 void *memmove(void *str1, const void *str2, size_t n) 从 str2 复制 n 个字符到 str1,但是在重叠内存块这方面,memmove() 是比 memcpy() 更安全的方法。如果目标区域和源区域有重叠的话,memmove() 能够保证源串在被覆盖之前将重叠区域的字节拷贝到目标区域中,复制后源区域的内容会被更改。如果目标区域与源区域没有重叠,则和 memcpy() 函数功能相同。
函数的声明:void *memmove(void *str1, const void *str2, size_t n)
参数:

str1 -- 指向用于存储复制内容的目标数组,类型强制转换为 void* 指针。
str2 -- 指向要复制的数据源,类型强制转换为 void* 指针。
n -- 要被复制的字节数。

该函数返回一个指向目标存储区 str1 的指针。
库函数 - memset()
C 库函数 void *memset(void *str, int c, size_t n) 复制字符 c(一个无符号字符)到参数 str 所指向的字符串的前 n 个字符。
函数的声明:void *memset(void *str, int c, size_t n)
参数:

str -- 指向要填充的内存块。
c -- 要被设置的值。该值以 int 形式传递,但是函数在填充内存块时是使用该值的无符号字符形式。
n -- 要被设置为该值的字符数。

该值返回一个指向存储区 str 的指针。
库函数 - strcat()
C 库函数 char *strcat(char *dest, const char *src) 把 src 所指向的字符串追加到 dest 所指向的字符串的结尾。
函数的声明:char *strcat(char *dest, const char *src)
参数:

dest -- 指向目标数组,该数组包含了一个 C 字符串,且足够容纳追加后的字符串。
src -- 指向要追加的字符串,该字符串不会覆盖目标字符串。

该函数返回一个指向最终的目标字符串 dest 的指针。
库函数 - strncat()
C 库函数 char *strncat(char *dest, const char *src, size_t n) 把 src 所指向的字符串追加到 dest 所指向的字符串的结尾,直到 n 字符长度为止。
函数的声明:char *strncat(char *dest, const char *src, size_t n)
参数:

dest -- 指向目标数组,该数组包含了一个 C 字符串,且足够容纳追加后的字符串,包括额外的空字符。
src -- 要追加的字符串。
n -- 要追加的最大字符数。

该函数返回一个指向最终的目标字符串 dest 的指针。
库函数 - strcmp()
C 库函数 int strcmp(const char *str1, const char *str2) 把 str1 所指向的字符串和 str2 所指向的字符串进行比较。
函数的声明:int strcmp(const char *str1, const char *str2)
参数:

str1 -- 要进行比较的第一个字符串。
str2 -- 要进行比较的第二个字符串。

返回值:

如果返回值小于 0,则表示 str1 小于 str2。
如果返回值大于 0,则表示 str1 大于 str2。
如果返回值等于 0,则表示 str1 等于 str2。

库函数 - strncmp()
C 库函数 int strncmp(const char *str1, const char *str2, size_t n) 把 str1 和 str2 进行比较,最多比较前 n 个字节。
函数的声明:int strncmp(const char *str1, const char *str2, size_t n)
参数:

str1 -- 要进行比较的第一个字符串。
str2 -- 要进行比较的第二个字符串。
n -- 要比较的最大字符数。

返回值:

如果返回值 < 0,则表示 str1 小于 str2。
如果返回值 > 0,则表示 str2 小于 str1。
如果返回值 = 0,则表示 str1 等于 str2。

库函数 - strcpy()
C 库函数 char *strcpy(char *dest, const char *src) 把 src 所指向的字符串复制到 dest。
需要注意的是如果目标数组 dest 不够大,而源字符串的长度又太长,可能会造成缓冲溢出的情况。
函数的声明:char *strcpy(char *dest, const char *src)
参数:

dest -- 指向用于存储复制内容的目标数组。
src -- 要复制的字符串。

该函数返回一个指向最终的目标字符串 dest 的指针。
库函数 - strncpy()
C 库函数 char *strncpy(char *dest, const char *src, size_t n) 把 src 所指向的字符串复制到 dest,最多复制 n 个字符。当 src 的长度小于 n 时,dest 的剩余部分将用空字节填充。
函数的声明:char *strncpy(char *dest, const char *src, size_t n)
参数:

dest -- 指向用于存储复制内容的目标数组。
src -- 要复制的字符串。
n -- 要从源中复制的字符数。

该函数返回最终复制的字符串。
库函数 - strlen()
C 库函数 size_t strlen(const char *str) 计算字符串 str 的长度,直到空结束字符,但不包括空结束字符。
函数的声明:size_t strlen(const char *str)
参数:

str -- 要计算长度的字符串。

该函数返回字符串的长度。
库函数 - strpbrk()
C 库函数 char *strpbrk(const char *str1, const char *str2) 检索字符串 str1 中第一个匹配字符串 str2 中字符的字符,不包含空结束字符。也就是说,依次检验字符串 str1 中的字符,当被检验字符在字符串 str2 中也包含时,则停止检验,并返回该字符位置。
函数的声明:char *strpbrk(const char *str1, const char *str2)
参数:

str1 -- 要被检索的 C 字符串。
str2 -- 该字符串包含了要在 str1 中进行匹配的字符列表。

该函数返回 str1 中第一个匹配字符串 str2 中字符的字符数,如果未找到字符则返回 NULL。
库函数 - strchr()
C 库函数 char *strchr(const char *str, int c) 在参数 str 所指向的字符串中搜索第一次出现字符 c(一个无符号字符)的位置。
函数的声明:char *strchr(const char *str, int c)
参数:

str -- 要被检索的 C 字符串。
c -- 在 str 中要搜索的字符。

该函数返回在字符串 str 中第一次出现字符 c 的位置,如果未找到该字符则返回 NULL。
库函数 - strrchr()
C 库函数 char *strrchr(const char *str, int c) 在参数 str 所指向的字符串中搜索最后一次出现字符 c(一个无符号字符)的位置。
函数的声明:char *strrchr(const char *str, int c)
参数:

str -- C 字符串。
c -- 要搜索的字符。以 int 形式传递,但是最终会转换回 char 形式。

该函数返回 str 中最后一次出现字符 c 的位置。如果未找到该值,则函数返回一个空指针。
库函数 - strspn()
C 库函数 size_t strspn(const char *str1, const char *str2) 检索字符串 str1 中第一个不在字符串 str2 中出现的字符下标。
函数的声明:size_t strspn(const char *str1, const char *str2)
参数:

str1 -- 要被检索的 C 字符串。
str2 -- 该字符串包含了要在 str1 中进行匹配的字符列表。

该函数返回 str1 中第一个不在字符串 str2 中出现的字符下标。
库函数 - strstr()
C 库函数 char *strstr(const char *haystack, const char *needle) 在字符串 haystack 中查找第一次出现字符串 needle 的位置,不包含终止符 ‘\0’。
函数的声明:char *strstr(const char *haystack, const char *needle)
参数:

haystack -- 要被检索的 C 字符串。
needle -- 在 haystack 字符串内要搜索的小字符串。

该函数返回在 haystack 中第一次出现 needle 字符串的位置,如果未找到则返回 null。
库函数 - strtok()
C 库函数 char *strtok(char *str, const char *delim) 分解字符串 str 为一组字符串,delim 为分隔符。
函数的声明:char *strtok(char *str, const char *delim)
参数:

str -- 要被分解成一组小字符串的字符串。
delim -- 包含分隔符的 C 字符串。

该函数返回被分解的第一个子字符串,如果没有可检索的字符串,则返回一个空指针。
strtok() 函数的用法:

#include <string.h>
#include <stdio.h>
 
int main () {
   char str[80] = "This is - www.runoob.com - website";
   const char s[2] = "-";
   char *token;
   
   /* 获取第一个子字符串 */
   token = strtok(str, s);
   
   /* 继续获取其他的子字符串 */
   while( token != NULL ) {
      printf( "%s\n", token );
    
      token = strtok(NULL, s);
   }
   
   return(0);
}

输出结果:

This is 
 www.runoob.com 
 website

Linux C语言strlcpy,strlcat函数
strlcpy函数创建的目的主要是针对strcpy函数缓冲区溢出的问题,因为一旦strcpy调用中src的字符串长度超过了dst的缓冲区大小,就会造成缓冲区安全漏洞问题,这是一类常见也严重的计算机安全漏洞。当然strcat函数也有安全版本的strlcat函数。
函数原型声明:size_t strlcpy(char *dest, const char *src, size_t size)
头文件引用:#include <string.h>
功能: 在已知dest缓冲区大小并不会造成缓冲区溢出前提下,将src地址开始的字符串复制到以dest开始的地址空间;
返回值:src字符串的大小;
函数参数:参数dest为目的字符串开始的指针,src为源字符串的开始地址,参数size代表dest字符串的大小;
strlcat—— 一致的、安全的字符串串接函数
函数原型声明:size_t strlcat(char *dest, const char *src, size_t destsz);
头文件引用:#include <string.h>
功能: 将长度有限的字符串附加到另一个字符串;
返回值:src字符串的大小;
函数参数:参数dest为目的字符串开始的指针,src为源字符串的开始地址,参数destsz代表dest字符串的大小;

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值