#include <stdio.h>
#include <string.h>
int main() {
char *slogan = "together{kaliya} [namak]";
char *slow_gun = strdup(slogan);
char *token = strsep(&slow_gun, "{");
printf ("\n slow_gun: %s\n token: %s\n", slow_gun, token);
return 0;
}
当我执行它时:
$ cc -o try try_strsep.c
$ ./try
slow_gun: kaliya} [namak]
token: together
但是,当我将char *标语更改为:
char *slogan = "kalia} [namak]";
并执行相同的程序:
$ vi try_strsep.c
$ cc -o try try_strsep.c
$ ./try
slow_gun: (null)
token: kalia} [namak]
我的问题是,所以当我使用strsep()且输入字符串没有我要查找的模式时,strsep()的返回结果是错误的。我可以验证strsep()是否找不到模式的唯一方法是检查
if (slow_gun == NUll)
。如果我有
char *slogan = "together{"
,那么strsep
将成功返回token
,但将slow_gun
返回为空白(而不是null
)$ cc -o try try_strsep.c
$ ./try
slow_gun:
token: together
有没有一种方法可以避免此IF检查,而是依靠该函数将substr返回给我,如果不存在,则返回
NULL
? 最佳答案
不,没有办法避免检查slow_gun == NULL
。 strsep
的行为的Here's a description:
char *strsep(char **stringp, const char *delim);
因此,如果未找到匹配项,
strsep
将返回指向原始字符串的指针,并将slow_gun
输入设置为NULL。如果定界符是字符串中的最后一个字符,则该字符将被'\0'覆盖,并将
slow_gun
设置为以下字符,该字符恰好是终止原始字符串的'\0'。这就是为什么print语句打印一个空字符串的原因。注意您使用的
strdup
错误,调用者负责在该函数返回的指针上调用free
。