strtok tokenization异常行为问题:双$为分隔符输出结果不符合预期
问题根因
strtok函数的设计逻辑和预期不一致,具体原因如下:
strtok的第二个入参是单个分隔符的集合,不是需要完全匹配的多字符分隔串:你传入"$$"时,函数会自动对分隔符集合去重,实际等效于传入"$",只要扫描到单个$就会判定为遇到分隔符。- 首次调用
strtok扫描字符串s时,会从字符串开头向后查找,碰到第一个属于分隔符集合的字符时,会直接把该字符改写为\0,然后返回该字符之前的子串指针。 - 你的测试字符串是
"hello $",hello后的空格后紧跟的$命中了分隔符规则,因此该$被改写为字符串结束符\0,最终printf输出的自然只有hello。
补充说明
如果需要实现按完整的"$$"作为分隔符拆分字符串,不能使用strtok,可以使用strstr函数匹配"$$"子串的位置,再手动截取拆分即可。
内容的提问来源于stack exchange,提问作者user14675723
相关产品推荐
相关产品推荐

