`
javatoyou
  • 浏览: 1082258 次
  • 性别: Icon_minigender_2
  • 来自: 北京
文章分类
社区版块
存档分类
最新评论

strsep

 
阅读更多

原型:char *strsep(char **stringp, const char *delim);

  功能:分解字符串为一组字符串, 此函数会改变字符串, 返回开始到 第一个出现 delim 的地方并在返回的字符串末尾自动加 ‘/0’,如果没有 delim,则返回NULL, 此函数 比strtok好处是接受空字符串并且是线程安全的。

切割后源字符串变为第一个delim 到stringp 末尾。如果stringp 为NULL,则返回NULL,

  示例:

  #include <stdio.h>

  #include <string.h>

  int main(void)

  {

  char str[] = "root:x::0:root:/root:/bin/bash:";

  char *buf;

  char *token;

  buf = str;

  while((token = strsep(&buf, ":")) != NULL){

  printf("%s/n", token);

  }

  return 0;

  }

  再一个示例程序:

  #include <stdio.h>

  #include <string.h>

  void main()

  {

  char str[]="Number=100&maxMtu=200";

  char *name,*value,*next;

  int i;

  value=str; //使指针value 指向字符串str;

  for(i=0 ;i<2 ;i++)

  { // 第一次执行时

  name = strsep(&value,"="); // 以"="分割字符串,这时strsep函数返回值为 "Number",即"="号之前的字符串

  next =value; // 这时指针value指向"="号后面的字符串,即"100&maxMtu=200"

  value=strsep(&next,"&"); // 这时通过"&"分割字符串,返回值为100,next指 向"maxMtu=200"

  printf(" name= %s/n",name); //打印出一轮分割后name的值

  printf("value= %s/n",value);

  value=next;

  }

  }

  执行结果为:

  name= Number

  value= 100

  name= maxMtu

  value= 200

注意 因为 strsep会完全分割字符串,所以如果不想改变源字符串,而只是想获取字符串中的特殊数据,应该用strdup函数复制一份,如:

char *src = "fjsd:43:fsdf:erer";

char *buf = strdup(src);

char *delime = NULL;

delime = strsep(&buf, ":");

这样,分割后输出src,并没有变化。否则(不先用strdup())会指向第一个:后面的字符串。

char *strrchr(const char *s, int c);

char *strchr(const char *s, int c);

strchr(const char *src, ':')

不改变源字符串,返回src中第一个 字符c出现的位置指针,包括 字符 c 到字符串末尾,所以如果不想在返回结果中包含 字符c 时可以 使返回指针向后移一位。

int main()
{
char src[] = "sdf:gjf:dgk";
char *buf = NULL;
char *token = NULL;
buf = src;
token = strchr(buf, ':');
printf("token : %s src : %s buf :%s /n", token,src,buf);

return 0;
}

输出 :token : :gjf:dgk src : sdf:gjf:dgk buf :sdf:gjf:dgk

去掉 :则

int main()
{
char src[] = "sdf:gjf:dgk";
char *buf = NULL;
char *token = NULL;
buf = src;
token = strchr(buf, ':');
if(token) {
*token++ = '/0';
}
printf("token : %s src : %s buf :%s /n", token,src,buf);

return 0;
}

分享到:
评论

相关推荐

    strstr,strdup,strsep 三函数实现

    `strstr`、`strdup`和`strsep`是三个非常实用的字符串操作函数,它们分别用于查找子串、复制字符串和分割字符串。下面将详细解释这三个函数的工作原理、用法以及它们在实际编程中的应用。 1. `strstr()` 函数: `...

    C语言分隔字符串函数接口strsep

    C语言分隔字符串函数接口strsep int strsep(char* line, char* lines[MAXSUBSTR], char* delim) 利用strtok实现

    c语言字符串分割函数strtok

    这个例子从文本文件ad9361.txt一行一行读取数据,通过spi设置寄存器值。支持命令读写:spidev_test -r F1 -w A0,-r参数表示寄存器地址,-w表示要写入的值,均为16进制(不要加0x开头)

    目录路径压栈出栈 C 语言源码.zip_C语言压栈代码_C语言源码_site:www.pudn.com

    为了处理目录路径,我们还需要额外的逻辑来分割路径字符串,这通常可以通过 `strtok` 或 `strsep` 函数来实现。 在提供的压缩文件中,`DSTACK` 可能是实现这种栈操作的C源代码文件,它包含了上述函数的具体实现。`...

    操作系统实践报告.docx

    此外,`strsep`函数用于分割用户输入的命令和参数,`strcmp`用于比较字符串,`execlp`和`chdir`用于执行系统命令和改变目录,`fopen`、`fwrite`和`fclose`用于文件重定向。 这个实践项目有助于理解操作系统的进程...

    tsc.rar_The Next_gettok

    在C语言中,标准库没有提供直接的gettok函数,但可以使用strtok或者fgets结合strsep等函数来实现类似功能。gettok可能有自己的特定规则来决定分隔符和如何处理连续的分隔符。 3. **源代码文件**: - `pp_mlaa_area...

    1190201308-陈东鑫-实验二1

    其中,`fopen`用于打开文件,`getline`用于读取文件内容,`strsep`用于分隔字符串,`fseek`和`ftell`用于定位文件指针,`fprintf`用于向文件写入内容,`getpwuid`用于获取用户信息,`getresuid`用于获取进程的实时...

    字符串操作

    - **`strsep`**:分割字符串,按指定分隔符返回子串,并修改原始字符串。 - **`strspn`**:计算从字符串开头到遇到不在指定字符集内的第一个字符为止的长度。 - **`strstr`**:在字符串中搜索子字符串的第一次出现...

    Vs2005 WinForm开发产生随机字符、字符串、随机数

    char[] chaSep = strSep.ToCharArray(); string[] aryChar = strChar.Split(chaSep, strChar.Length); Random rnd = new Random(); string strRandom = string.Empty; // 放到循环外是随机产生一个字符 ...

    完整的Mingw开发环境5

    大家使用gcc在windows下开发软件,有两个途径,一、Cygwin,二、Mingw32 Cygwin可以使用autoconf,automake,libtool,libiconv and gettext(I18N/L10N) 进行完整的开发, 但由于Cygwin 封装了一层底层库,所以运行速度...

    linux线程的实现 - aitao - 博客园1

    另外,`strsep`和`strtok_r`是C语言中用于字符串分割的函数,它们提供了一种更安全的方式来替代可能导致内存问题的`strtok`。 【缓存策略】 在软件设计中,缓存穿透是指查询一个不存在的数据,导致缓存和数据库都...

    c语言实现的tsv文件读取源代码

    3. 数据解析:由于TSV文件是用制表符分隔的,我们可以使用`strtok()`或`strsep()`函数,将每行数据分割成多个字段。这些函数会使用指定的分隔符(这里是制表符)来切割字符串。 4. 内存管理:在读取过程中,需要...

    操作系统实践报告.doc

    用户输入的命令和参数被拆分成字符串数组,这里使用了`strsep()`函数,它可以从字符串中提取出由特定分隔符(在这里是空格)分隔的部分。通过循环遍历,将拆分后的参数存储到二维数组中。 3. **命令执行**: 使用...

    c高级实用程序设计

    10. **标准库高级功能**:深入研究C标准库中的高级函数,如`strtok`、`strptime`、`strsep`等,以及`math.h`、`time.h`等头文件中的复杂功能。 在学习过程中,读者会遇到许多示例代码和练习题,这些都是为了巩固...

    ntfs-3g 架构分析文档

    此外,`ntfs_strdup()`和`ntfs_strsep()`用于字符串操作,前者是安全的字符串复制,后者用于按指定分隔符分割字符串。 时间转换函数在`ntfstime.h`中定义,如`ntfs2utc()`和`ntfs2ctu()`,它们负责在NTFS时间格式和...

    使用strtok函数截取字符串得到相应的子串存入数组中

    为了确保程序的健壮性,可以考虑使用更安全的替代方法,如`strsep`或自定义的字符串分割函数。 在实际编程中,你可能还需要处理一些边界情况,例如检查数值是否超出数据类型的范围,或者处理无效的数值输入(如非...

Global site tag (gtag.js) - Google Analytics