C语言——字符函数和字符串函数

发布于:2024-04-25 ⋅ 阅读:(19) ⋅ 点赞:(0)

1.assert断言(判断程序运行时是否符合条件)

<assert.h>头文件定义了宏assert(),⽤于在运⾏时确保程序符合指定条件,如果不符合,就报 错终⽌运⾏。这个宏常常被称为“断⾔”

assert() 宏接受⼀个表达式作为参数。如果该表达式为真(返回值⾮零), assert() 不会产⽣任何作⽤,程序继续运⾏。如果该表达式为假(返回值为零), assert() 就会报错,在标准错误流stderr 中写⼊⼀条错误信息,显⽰没有通过的表达式,以及包含这个表达式的⽂件名和⾏号。

assert() 的使⽤对程序员是⾮常友好的,使⽤ assert() 有⼏个好处:它不仅能⾃动标识⽂件和出问题的⾏号,还有⼀种⽆需更改代码就能开启或关闭 assert() 的机制如果已经确认程序没有问题,不需要再做断⾔,就在 #include <assert.h> 语句的前⾯,定义⼀个宏 NDEBUG 。然后,重新编译程序,编译器就会禁⽤⽂件中所有的 assert() 语句。如果程序⼜出现问题,可以移除这条 #define NDBUG 指令(或者把它注释掉),再次编译,这样就重新启⽤了 assert() 语句。

assert() 的缺点是,因为引⼊了额外的检查,增加了程序的运⾏时间。⼀般我们可以在 Debug 中使⽤,在 Release 版本中选择禁⽤ assert 就⾏,在 VS 这样的集成开发环境中,在 Release 版本中,直接就是优化掉了。这样在debug版本写有利于程序员排查问题,在 Release 版本不影响⽤⼾使⽤时程序的效率。

2.字符函数

头文件<ctype.h>

基本格式:

1.字符分类函数

符号条件返回非0,不符合条件返回0。

2.字符转换函数

示例:

3.字符串函数

3.1 strcpy函数

1.头文件 <string.h>

2.基本格式

将源头source中的字符串拷贝到目的地 destination 目标数组中,包括 null 字符(并在该点停止)

源字符串必须以 '\0' 结束。

目标数组必须足够大。

目标数组必须可修改。源字符串不可修改。

模拟实现:

3.2 strcat函数

头文件<string.h>

基本格式:

将源字符串中的字符连接到目标字符串中,目标字符串中的终止字符 null 将会被源字符串中的第一个字符所覆盖,源字符串中的终止字符 null 也要连接到目标字符串中。

源字符串中必须包含 '\0' 。

目标字符串必须包含 '\0',否则不知道连接从哪里开始。

目标空间必须足够大,可以容纳下源字符串中的内容。

目标空间必须可修改。

目的地和来源不可以重叠。否则将会造成字符串无限连接,直到栈溢出。

模拟实现:

3.3 strcmp函数

比较两个字符串的大小

头文件<string.h>

从第一个字符开始按 ASCLL 码值将两个字符串的字符逐个进行比较,如果相同,则继续执行下一对,直到遇到字符不同或 \0 停止。

如果 str1 > str2 则返回值 >0

如果 str1 == str2 则返回值 ==0

如果 str1 < str2 则返回值 <0

模拟实现:

         

3.4 strncpy函数

1.头文件<string.h>

2.基本格式:

将源字符串的前num个字符拷贝到目标空间中

1.如果在拷贝num个字符之前就找到源字符串的末尾(null),即source的长度小于num,则剩余字符将用零填充,直至将num个字符拷贝到目标空间中。

2.如果source的长度大于num,则不会在目标空间末尾隐式附加 null 字符。因此,在这种情况下,destination 不应被视为以 null 结尾的字符串(这样读取时它会溢出)。

目标空间必须足够大,可以容纳下要拷贝的字符串

目标空间必须可修改,源字符串不可修改。


目的地和来不得重叠

模拟实现:

3.5 strncat函数

1.头文件 <string.h>

2.基本格式:

1.将源字符串的前 num 字符追加目标空间后,加上一个终止的 null 字符。

2.如果源 字符串的长度小于 num,则仅复制终止 null 字符之前的内容,之后再加上一个终止的 null 字符。

目标应该足够大,可以容纳下连接的num个字符

目标字符串必须可修改,源字符串不可修改

目标字符串必须包含终止字符 '\0',否则不知道连接从哪里开始

模拟实现:

3.6 strncmp函数

1.头文件<string.h>

2.基本格式:

此函数开始比较每个字符串的第一个字符。如果它们彼此相等,则继续执行以下对,直到字符不同,直到达到终止的 null 字符,或者直到两个字符串中的 num 个字符匹配,以先发生者为准。

如果 str1 > str2 则返回值 >0

如果 str1 == str2 则返回值 ==0

如果 str1 < str2 则返回值 <0

模拟实现:

3.7 strstr函数

1.头文件<string.h>

2.基本格式:

返回指向 str1 中首次出现的 str2 的指针,如果 str2 不是 str1 的一部分,则返回空指针。

字符串的⽐较匹配不包含 \0 字符,以 \0 作为结束标志。
模拟实现:
   

3.8 strtok函数

1.头文件:<string.h>

2.基本格式:

sep参数指向⼀个字符串,定义了⽤作分隔符的字符集合 ,通过sep字符串中的分隔符将str参数指向的 包含了0个或者多个由sep字符串中⼀个或者多个分隔符的 字符串进行分隔。
str参数指向了一个字符串,它包含了0个或者多个由sep字符串中⼀个或者多个分隔符分割的标记。
strtok函数找到str中的下⼀个标记,并将其用'\0'结尾 ,返回⼀个指向这个标记的指针。(注:
strtok函数会改变被操作的字符串,所以在使⽤strtok函数切分的字符串⼀般都是临时拷⻉的内容
并且可修改。)
strtok函数的第⼀个参数不为NULL ,函数将找到str中第⼀个标记,strtok函数将保存它在字符串 中的位置。
strtok函数的第⼀个参数为 NULL ,函数将在同⼀个字符串中被保存的位置开始,查找下⼀个标 记。
如果字符串中不存在更多的标记,则返回 NULL 指针。
模拟实现:

3.9 strerror函数

1.头文件<string.h>

2.基本格式:

strerror函数可以把参数部分错误码对应的错误信息的字符串地址返回来。
在不同的系统和C语⾔标准库的实现中都规定了⼀些错误码,⼀般是放在 errno.h 这个头⽂件中说明的,C语⾔程序启动的时候就会使⽤⼀个全⾯的变量errno来记录程序的当前错误码,只不过程序启动的时候errno是0,表⽰没有错误,当我们在使⽤标准库中的函数的时候发⽣了某种错误,就会讲对应的错误码,存放在errno中,⽽⼀个错误码的数字是整数很难理解是什么意思,所以每⼀个错误码都是有对应的错误信息的。strerror函数就可以将错误对应的错误信息字符串的地址返回。
打印0-10错误码对应的错误信息:

perror 有能力直接打印错误信息,打印的时候,先打印传递给perror的字符串,然后打印,再打印空格,最后打印错误信息。如果传递给perror的字符串为空字符串,直接打印错误信息。

头文件:<stdio.h>

基本格式: