linux c lib函数strsep 用法

strsep 是lib 函数 ,他的主要作用是分割字符串, 和strtok 的作用相同。但是有区别。

我们主要去看一下strsep 的用法, 因为现在好多地方都放弃了strtok

先来一个例子

char test[64]="7,8,9,";

char *p = NULL, *p_str=NULL;

char tem[]=",“;

int i = 0;

p_str=test;

p=strsep(&p_str,tem);

while(p )

{

printf("i=%d====/p=%s/ /p_str=%s/\n",i,p,p_str)

i++;

p=strsep(&p_str,tem);

}

这种情况会返回什么,

结果为: i=0=====/p=7/ /p_str=8,9,/

i=1=====/p=8/ /p_str=9,/

i=3=====/p=9/ /p_str=/

i=4=====/p=/ /p_str=NULL/

是不和奇怪 为什么还会又i=4 这一条打印出来!!! 百思不得其解。

看看 string.c 中关于 strsep 的实现就明白了。

 就是 strsep 即使没有分个到 第一次也是返回 原字符串的 在最后一个分割后是空串 所以返回空串。 所以才有了 最后 i=4 的打印。

因此 我们必须 再使用 strsep 时 自己来检查 分割后的字串的 合法行。 

我们把while(p ) 换成 while(p != NULL && strcmp(p,"")!=0)

或者我们把char test[64]="7,8,9,"; 改成 char test[64]="7,8,9";  最后一个逗号自己去掉 也没有问题。 注意这个9, 的最后是有一个空字符串的。

这样既可以避免 再最后一次分割时 返回的时空串。

这里要注意 空字符串和 空格时两种概念。   空串 表示 "\0",  strcmp 比较用""  而空格 指的时 “ ” 

1、表示区别

     string str1 = "";    //空字符串      str1.length() 等于 0

     string str2 = null; //NULL

     string str3 = " ";   //空格串          str2.length() 等于 1


2、内存区别

      ""    :分配了内存 ,分配了一个空间

     null  :未分配内存

      " "   :分配了内存
 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值