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

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>

基本格式:

相关推荐
q567315232 分钟前
在 Bash 中获取 Python 模块变量列
开发语言·python·bash
许野平27 分钟前
Rust: 利用 chrono 库实现日期和字符串互相转换
开发语言·后端·rust·字符串·转换·日期·chrono
也无晴也无风雨30 分钟前
在JS中, 0 == [0] 吗
开发语言·javascript
狂奔solar39 分钟前
yelp数据集上识别潜在的热门商家
开发语言·python
朱一头zcy1 小时前
C语言复习第9章 字符串/字符/内存函数
c语言
此生只爱蛋1 小时前
【手撕排序2】快速排序
c语言·c++·算法·排序算法
blammmp1 小时前
Java:数据结构-枚举
java·开发语言·数据结构
何曾参静谧1 小时前
「C/C++」C/C++ 指针篇 之 指针运算
c语言·开发语言·c++
暗黑起源喵2 小时前
设计模式-工厂设计模式
java·开发语言·设计模式
WaaTong2 小时前
Java反射
java·开发语言·反射