C语言库函数strrchr与strtok_r详解
5星 · 超过95%的资源 需积分: 10 5 浏览量
更新于2024-08-05
收藏 1KB TXT 举报
"本文主要介绍了C库中的两个字符串处理函数——`strrchr`和`strtok_r`的使用方法。`strrchr`用于查找字符串中指定字符最后一次出现的位置,而`strtok_r`则是一个可重入的字符串分割函数,能够按指定分隔符将字符串分割成多个部分。"
在C编程中,处理字符串是常见的任务之一,`strrchr`和`strtok_r`是C标准库提供的两个非常实用的函数,它们分别在字符串查找和分割方面发挥着重要作用。
### `strrchr`函数
`strrchr`函数定义如下:
```c
char *strrchr(const char *str, int c);
```
该函数接收两个参数:一个指向字符串的指针`str`和一个整型值`c`,代表要查找的字符。它会在`str`所指向的字符串中从前往后搜索字符`c`,并返回最后一次出现该字符的位置的指针。如果未找到该字符,函数将返回`NULL`。
以下是一个简单的`strrchr`使用示例:
```c
#include <stdio.h>
#include <string.h>
int main() {
const char str[] = "https://www.runoob.com";
const char ch = '.';
char *ret;
ret = strrchr(str, ch);
printf("|%c|之后的字符串是-|%s|\n", ch, ret);
return 0;
}
```
输出为:
```
|.|之后的字符串是-|.com|
```
这个例子展示了如何找到字符串中最后一个`.`的位置,并获取`.`之后的子串。
### `strtok_r`函数
`strtok_r`函数是`strtok`的可重入版本,它的定义如下:
```c
char *strtok_r(char * restrict s1, const char * restrict s2, char restrict saveptr);
```
这个函数用于按照分隔符`s2`将字符串`s1`分割成多个部分。与`strtok`不同的是,`strtok_r`通过`saveptr`参数来保存状态,使得多线程环境下可以安全地使用。`strtok_r`在每次调用时都会返回一个新找到的子串,直到所有子串都被找到,然后返回`NULL`。
以下是一个使用`strtok_r`的例子:
```c
#include <stdio.h>
#include <time.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
void func() {
char pchSrc[] = "CanIhelpyou";
char chBuffer[102];
char *pchDilem = "";
char *pchStrTmpIn = NULL;
char *pchTmp = NULL;
strncpy(chBuffer, pchSrc, sizeof(chBuffer) - 1);
pchTmp = chBuffer;
while (NULL != (pchTmp = strtok_r(pchTmp, pchDilem, &pchStrTmpIn))) {
printf("\npchTmp[%s] pchStrTmpIn[%s]\n", pchTmp, pchStrTmpIn);
pchTmp = NULL;
}
}
int main() {
func();
return 0;
}
```
输出为:
```
pchTmp[Can] pchStrTmpIn[Ihelpyou]
pchTmp[I] pchStrTmpIn[helpyou]
pchTmp[help] pchStrTmpIn[you]
pchTmp[you] pchStrTmpIn[]
```
在这个例子中,字符串"CanIhelpyou"被按照空格分隔成了"Can"、"I"、"help"和"you"四个部分。
总结来说,`strrchr`和`strtok_r`都是C语言中处理字符串的重要工具。`strrchr`用于查找特定字符在字符串中的位置,而`strtok_r`则用于分割字符串。了解并熟练掌握这两个函数,对于编写涉及字符串操作的C程序是非常有帮助的。
2009-11-13 上传
2011-03-19 上传
2009-08-09 上传
2023-09-05 上传
2021-09-30 上传
129 浏览量
2018-06-28 上传
2012-03-08 上传
2024-11-16 上传
tustxk
- 粉丝: 2
- 资源: 13
最新资源
- 平尾装配工作平台运输支撑系统设计与应用
- MAX-MIN Ant System:用MATLAB解决旅行商问题
- Flutter状态管理新秀:sealed_flutter_bloc包整合seal_unions
- Pong²开源游戏:双人对战图形化的经典竞技体验
- jQuery spriteAnimator插件:创建精灵动画的利器
- 广播媒体对象传输方法与设备的技术分析
- MATLAB HDF5数据提取工具:深层结构化数据处理
- 适用于arm64的Valgrind交叉编译包发布
- 基于canvas和Java后端的小程序“飞翔的小鸟”完整示例
- 全面升级STM32F7 Discovery LCD BSP驱动程序
- React Router v4 入门教程与示例代码解析
- 下载OpenCV各版本安装包,全面覆盖2.4至4.5
- 手写笔画分割技术的新突破:智能分割方法与装置
- 基于Koplowitz & Bruckstein算法的MATLAB周长估计方法
- Modbus4j-3.0.3版本免费下载指南
- PoqetPresenter:Sharp Zaurus上的开源OpenOffice演示查看器