使用 C 语言中的 strsep 函数
本文将演示如何在 C 语言中使用 strsep
函数的多种方法。
使用 strsep
函数在字符串中查找给定标记
strsep
是 C 标准库字符串实用程序的一部分,定义在 <string.h>
头文件中。它可以用来从字符串对象中提取被给定定界符包围的标记。
strsep
需要两个参数-指向 char*
的指针和指向 char
的指针。第一个参数用于传递需要搜索的字符字符串的地址。第二个参数指定了一组定界符,用来标记提取的标记的开始和结束。请注意,在提取的标记字符串中,定界符会被丢弃。当找到第一个标记时,第一个参数被修改为存储指向下一个定界符的指针。
在下面的例子中,我们演示了如何使用对 strsep
的单次调用,提取两个以给定字符定界的标记。请注意,程序从 2 个命令行参数中获取字符串和定界符集,如果没有提供所需的参数,则以失败退出。接下来,我们用 strdupa
函数调用复制字符串,因为 strsep
修改了传递的指针,我们不想丢失原始值。strdupa
在栈上分配动态内存,调用者不应该释放从它返回的指针。
#define _GNU_SOURCE
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main(int argc, char *argv[])
{
char *str1, *token;
if (argc != 3) {
fprintf(stderr, "Usage: %s string delim\n",
argv[0]);
exit(EXIT_FAILURE);
}
str1 = strdupa(argv[1]);
if (!str1)
exit(EXIT_FAILURE);
token = strsep(&str1, argv[2]);
if (token == NULL)
exit(EXIT_FAILURE);
printf("extracted: '%s'\n", token);
printf("left: '%s'\n", str1);
exit(EXIT_SUCCESS);
}
示例命令:
./program "hello there" t
输出:
extracted: 'hello '
left: 'here'
或者,我们可以实现 for
循环,连续调用 strsep
函数,并提取每一个带有给定定界符的标记,而不是只提取最先遇到的标记-如前面的示例代码所示。但请注意,当一行中有两个定界符时,strsep
会返回一个空字符串;因此,调用者有责任在处理结果标记之前检查这一点。类似的功能也可以用 strtok
和 strtok_r
库函数来提供,但略有不同,在这个页面上有详细描述。
#define _GNU_SOURCE
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main(int argc, char *argv[])
{
char *str1, *token;
if (argc != 3) {
fprintf(stderr, "Usage: %s string delim\n",
argv[0]);
exit(EXIT_FAILURE);
}
str1 = strdupa(argv[1]);
if (!str1)
exit(EXIT_FAILURE);
for (int j = 1; ; j++) {
token = strsep(&str1, argv[2]);
if (token == NULL)
break;
printf("%d: '%s'\n", j, token);
}
exit(EXIT_SUCCESS);
}
示例命令:
./program "hello there" tl
输出:
1: 'he'
2: ''
3: 'o '
4: 'here'
相关文章
Oracle 的 decode 函数在 MySQL 中的等价物
发布时间:2023/05/09 浏览次数:115 分类:MySQL
-
本篇文章介绍了三种替代实现,我们可以将它们用作 MySQL 中 Oracle 的 decode() 函数的等价物。 为此,我们将使用 IF()、CASE 以及 FIELD() 和 ELT() 的组合。
更改 MySQL 服务器中的 max_allowed_packet Size
发布时间:2023/05/09 浏览次数:142 分类:MySQL
-
本篇文章介绍如何更改 MySQL 服务器中的 max_allowed_packet 大小。 为了了解这一点,我们将使用两个操作系统,Windows 10 和 Linux (Ubuntu)。
MySQL 修复 Data Is Truncated for a Column 错误
发布时间:2023/05/09 浏览次数:72 分类:MySQL
-
本文介绍 MySQL 错误 Data is truncated for a column 的可能原因和解决方法。修复数据因 MySQL 中的列错误而被截断
MySQL 错误 Error Server PID File Could Not Be Found 解决
发布时间:2023/05/09 浏览次数:98 分类:MySQL
-
在这篇文章中,我们将研究错误! Error Server PID File Could Not Be Found! 在 MySQL 及其解决方案中有充分的解释。
MySQL ForEach 循环
发布时间:2023/05/08 浏览次数:140 分类:MySQL
-
本篇文章介绍如何在一条语句中使用 INSERT、SELECT、WHERE 和 JOIN 模拟 MySQL 中的 foreach 循环。
使用 JDBC 连接到 MySQL 数据库
发布时间:2023/05/08 浏览次数:82 分类:MySQL
-
本文讨论 JDBC 以及使用 JDBC 连接数据库的要求。 我们还查看了一个示例,以了解如何实现 Java 代码来连接 MySQL 数据库。MySQL 为使用 Java 编程语言和 MySQL Connector/J 开发的应用程序提供连接。
遍历 MySQL 表的所有行
发布时间:2023/05/08 浏览次数:161 分类:MySQL
-
本篇文章介绍了如何使用 WHILE 和 CURSOR 遍历 MySQL 表的所有行。遍历 MySQL 表的所有行
在 C 语言中使用 typedef enum
发布时间:2023/05/07 浏览次数:181 分类:C语言
-
本文介绍了如何在 C 语言中使用 typedef enum。使用 enum 在 C 语言中定义命名整数常量 enum 关键字定义了一种叫做枚举的特殊类型。