C语言库函数strrchr与strtok_r详解

5星 · 超过95%的资源 需积分: 10 3 下载量 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程序是非常有帮助的。