gpt4 book ai didi

c - strsep() 用法及其替代方法

转载 作者:太空狗 更新时间:2023-10-29 17:15:14 26 4
gpt4 key购买 nike

#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 *slogan 更改为:

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 == NULLHere's a description strsep 的行为:

char *strsep(char **stringp, const char *delim);

DESCRIPTION
If *stringp is NULL, the strsep() function returns NULL and does nothing else. Otherwise, this function finds the first token in the string *stringp, where tokens are delimited by symbols in the string delim. This token is terminated by overwriting the delimiter with a null byte ('\0') and *stringp is updated to point past the token. In case no delimiter was found, the token is taken to be the entire string *stringp, and *stringp is made NULL.

RETURN VALUE
The strsep() function returns a pointer to the token, that is, it returns the original value of *stringp.

因此,如果未找到匹配项,strsep 将返回指向原始字符串的指针并将 slow_gun 输入设置为 NULL。

如果定界符是字符串中的最后一个字符,该字符将被 '\0' 覆盖,并且 slow_gun 设置为后面的字符,恰好是终止字符串的 '\0'原始字符串。这就是 print 语句打印空字符串的原因。

注意 您错误地使用了 strdup,调用者负责在该函数返回的指针上调用 free

关于c - strsep() 用法及其替代方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6865963/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com