Linux C编程——strtok_r 和 strtok 函数

2024-06-03 22:18
文章标签 linux 函数 编程 strtok

本文主要是介绍Linux C编程——strtok_r 和 strtok 函数,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

 

 

一、简介

 

NAMEstrtok, strtok_r - extract tokens from stringsSYNOPSIS#include <string.h>char *strtok(char *str, const char *delim);char *strtok_r(char *str, const char *delim, char **saveptr);DESCRIPTIONThe strtok() function parses a string into a sequence of tokens.  On the first call to strtok() the string to be parsed should be specified in str.  In each subsequent call that should parse the same  string,  str should be NULL.解析str指向的字符串,delim指向分隔符,后续调用解析相同的字符串时,str设置为NULL。The delim argument specifies a set of characters that delimit the tokens in the parsed string.  The caller may specify different strings in delim in successive calls that parse the same string.后续解析相同字符串时,分隔符delim可以不同。Each call to strtok() returns a pointer to a null-terminated  string  containing  the  next  token.   This  string does not include the delimiting character.  If no more tokens are found, strtok() returns NULL.strtok 返回以NULL结尾的指向后续字符的指针,指针指向的字符串不包含下一个分隔符delim及其后面的字符。解析到结尾时,返回NULL。A  sequence of two or more contiguous delimiter characters in the parsed string is considered to be a single delimiter.  Delimiter characters at the start or end of the string are ignored.  Put another way:  the tokens returned by strtok() are always non-empty strings.待解析字符串str中连续的多个delim被认为只有一个,str中开头和结尾的delim被忽略,运行例子如下:[root@localhost tmp]# ./a.out "||a,b,c||e,d,f|h,i,j|w,z,d,e" "|" ','  1: a,b,c --> a --> b --> c2: e,d,f --> e --> d --> f3: h,i,j --> h --> i --> j4: w,z,d,e --> w --> z --> d --> eThe  strtok_r()  function  is a reentrant version strtok().  The saveptr argument is a pointer to a char * variable that is used internally by strtok_r() in order to maintain context between successive calls  that parse the same string.strtok_r是strtok的可重入版。On  the first call to strtok_r(), str should point to the string to be parsed, and the value of saveptr is ignored.  In subsequent calls, str should be NULL, and saveptr should  be  unchanged  since  the  previous call.首次调用strtok_r时,str设置为待解析字符串,saveptr 被忽略,后续调用str设为NULL,saveptr 不变,用来连接上次的解析。Different strings may be parsed concurrently using sequences of calls to strtok_r() that specify different saveptr arguments.如例子中所示,saveptr 不同,表示解析不同的字符串。

 

二、举例

#include <stdio.h>
#include <stdlib.h>
#include <string.h>int
main(int argc, char *argv[])
{
char *str1, *str2, *token, *subtoken;
char *saveptr1, *saveptr2;
int j;if (argc != 4) {fprintf(stderr, "Usage: %s string delim subdelim\n",argv[0]);exit(EXIT_FAILURE);
}for (j = 1, str1 = argv[1]; ; j++, str1 = NULL) {token = strtok_r(str1, argv[2], &saveptr1);if (token == NULL)break;printf("%d: %s", j, token);for (str2 = token; ; str2 = NULL) {subtoken = strtok_r(str2, argv[3], &saveptr2);if (subtoken == NULL)break;printf(" --> %s", subtoken);}puts("");
}exit(EXIT_SUCCESS);
} /* main */

测试结果:

[root@localhost tmp]# gcc strtok_r.c                             
[root@localhost tmp]# ./a.out "a,b,c|e,d,f|h,i,j|w,z,d,e" '|' ','
1: a,b,c --> a --> b --> c
2: e,d,f --> e --> d --> f
3: h,i,j --> h --> i --> j
4: w,z,d,e --> w --> z --> d --> e[root@localhost tmp]# ./a.out "||a,b,c||e,d,f|h,i,j|w,z,d,e" "|" ','  
1: a,b,c --> a --> b --> c
2: e,d,f --> e --> d --> f
3: h,i,j --> h --> i --> j
4: w,z,d,e --> w --> z --> d --> e

 

这篇关于Linux C编程——strtok_r 和 strtok 函数的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!


原文地址:
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.chinasem.cn/article/1028266

相关文章

Linux系统性能检测命令详解

《Linux系统性能检测命令详解》本文介绍了Linux系统常用的监控命令(如top、vmstat、iostat、htop等)及其参数功能,涵盖进程状态、内存使用、磁盘I/O、系统负载等多维度资源监控,... 目录toppsuptimevmstatIOStatiotopslabtophtopdstatnmon

在Linux中改变echo输出颜色的实现方法

《在Linux中改变echo输出颜色的实现方法》在Linux系统的命令行环境下,为了使输出信息更加清晰、突出,便于用户快速识别和区分不同类型的信息,常常需要改变echo命令的输出颜色,所以本文给大家介... 目python录在linux中改变echo输出颜色的方法技术背景实现步骤使用ANSI转义码使用tpu

linux hostname设置全过程

《linuxhostname设置全过程》:本文主要介绍linuxhostname设置全过程,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录查询hostname设置步骤其它相关点hostid/etc/hostsEDChina编程A工具license破解注意事项总结以RHE

MySQL 中的 CAST 函数详解及常见用法

《MySQL中的CAST函数详解及常见用法》CAST函数是MySQL中用于数据类型转换的重要函数,它允许你将一个值从一种数据类型转换为另一种数据类型,本文给大家介绍MySQL中的CAST... 目录mysql 中的 CAST 函数详解一、基本语法二、支持的数据类型三、常见用法示例1. 字符串转数字2. 数字

Python内置函数之classmethod函数使用详解

《Python内置函数之classmethod函数使用详解》:本文主要介绍Python内置函数之classmethod函数使用方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地... 目录1. 类方法定义与基本语法2. 类方法 vs 实例方法 vs 静态方法3. 核心特性与用法(1编程客

Python函数作用域示例详解

《Python函数作用域示例详解》本文介绍了Python中的LEGB作用域规则,详细解析了变量查找的四个层级,通过具体代码示例,展示了各层级的变量访问规则和特性,对python函数作用域相关知识感兴趣... 目录一、LEGB 规则二、作用域实例2.1 局部作用域(Local)2.2 闭包作用域(Enclos

Linux中压缩、网络传输与系统监控工具的使用完整指南

《Linux中压缩、网络传输与系统监控工具的使用完整指南》在Linux系统管理中,压缩与传输工具是数据备份和远程协作的桥梁,而系统监控工具则是保障服务器稳定运行的眼睛,下面小编就来和大家详细介绍一下它... 目录引言一、压缩与解压:数据存储与传输的优化核心1. zip/unzip:通用压缩格式的便捷操作2.

MySQL count()聚合函数详解

《MySQLcount()聚合函数详解》MySQL中的COUNT()函数,它是SQL中最常用的聚合函数之一,用于计算表中符合特定条件的行数,本文给大家介绍MySQLcount()聚合函数,感兴趣的朋... 目录核心功能语法形式重要特性与行为如何选择使用哪种形式?总结深入剖析一下 mysql 中的 COUNT

Linux中SSH服务配置的全面指南

《Linux中SSH服务配置的全面指南》作为网络安全工程师,SSH(SecureShell)服务的安全配置是我们日常工作中不可忽视的重要环节,本文将从基础配置到高级安全加固,全面解析SSH服务的各项参... 目录概述基础配置详解端口与监听设置主机密钥配置认证机制强化禁用密码认证禁止root直接登录实现双因素

Go语言数据库编程GORM 的基本使用详解

《Go语言数据库编程GORM的基本使用详解》GORM是Go语言流行的ORM框架,封装database/sql,支持自动迁移、关联、事务等,提供CRUD、条件查询、钩子函数、日志等功能,简化数据库操作... 目录一、安装与初始化1. 安装 GORM 及数据库驱动2. 建立数据库连接二、定义模型结构体三、自动迁