首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >strtok不返回nullptr

strtok不返回nullptr
EN

Stack Overflow用户
提问于 2018-02-05 13:12:13
回答 2查看 1.6K关注 0票数 2

函数strtok不像它应该的那样工作。

http://www.cplusplus.com/reference/cstring/strtok/

这个站点告诉我们,当strtok找不到令牌时,它会返回nullptr。我不知道为什么在我的代码里没有。

下面是示例代码:

代码语言:javascript
复制
int main()
{
    char *c = "abcdefg";
    if (strtok(c, "^&") != NULL)
        printf("I found this in this string");
    else
        printf("I don;t");
    return 0;
}

它总是打印“我在这个字符串中找到了这个”,但是在字符串"abcdefg“中没有像'^‘或'&’这样的字符。

我在代码::块和Visual中编译了这个代码,并且始终是相同的:/

请告诉我我做错了什么。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2018-02-05 13:16:09

strtok函数根据分隔符拆分字符串。如果字符串中没有这样的分隔符,那么就没有什么要拆分的,所以整个字符串在第一次调用时返回。第二个调用(假设传入相同的分隔符)将返回NULL。第一次调用将返回NULL的唯一时间是传入空字符串。

手册页指出:

在同一字符串上操作的对strtok()的调用序列维护一个指针,该指针确定开始搜索下一个令牌的点。对strtok()的第一次调用将这个指针设置为指向字符串的第一个字节。下一个令牌的开始是通过扫描str中的下一个非分隔字节来确定的。如果找到这样的字节,则将其作为下一个令牌的开始。如果找不到这样的字节,那么就没有更多的标记,而strtok()返回NULL。(空字符串或只包含分隔符的字符串将导致strtok()在第一次调用时返回NULL。)

此外,strtok修改传递给它的字符串,以便将其拆分。在您的示例中,c指向不能修改的字符串文本。您应该将其更改为字符串:

代码语言:javascript
复制
char c[] = "abcdefg";
票数 3
EN

Stack Overflow用户

发布于 2018-02-05 13:17:18

除非传递的字符串为NULL,否则对strtok的第一次调用将永远不会返回空。函数搜索不包含在分隔符字符串中的第一个字符,并返回该字符。随后的调用将返回NULL tho,因为第一个“令牌”跨越整个字符串。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/48623400

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档