函数strtok不像它应该的那样工作。
http://www.cplusplus.com/reference/cstring/strtok/
这个站点告诉我们,当strtok找不到令牌时,它会返回nullptr。我不知道为什么在我的代码里没有。
下面是示例代码:
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中编译了这个代码,并且始终是相同的:/
请告诉我我做错了什么。
发布于 2018-02-05 13:16:09
strtok函数根据分隔符拆分字符串。如果字符串中没有这样的分隔符,那么就没有什么要拆分的,所以整个字符串在第一次调用时返回。第二个调用(假设传入相同的分隔符)将返回NULL。第一次调用将返回NULL的唯一时间是传入空字符串。
手册页指出:
在同一字符串上操作的对strtok()的调用序列维护一个指针,该指针确定开始搜索下一个令牌的点。对strtok()的第一次调用将这个指针设置为指向字符串的第一个字节。下一个令牌的开始是通过扫描str中的下一个非分隔字节来确定的。如果找到这样的字节,则将其作为下一个令牌的开始。如果找不到这样的字节,那么就没有更多的标记,而strtok()返回NULL。(空字符串或只包含分隔符的字符串将导致strtok()在第一次调用时返回NULL。)
此外,strtok修改传递给它的字符串,以便将其拆分。在您的示例中,c指向不能修改的字符串文本。您应该将其更改为字符串:
char c[] = "abcdefg";发布于 2018-02-05 13:17:18
除非传递的字符串为NULL,否则对strtok的第一次调用将永远不会返回空。函数搜索不包含在分隔符字符串中的第一个字符,并返回该字符。随后的调用将返回NULL tho,因为第一个“令牌”跨越整个字符串。
https://stackoverflow.com/questions/48623400
复制相似问题