You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

为何strtok函数未按指定\n\n分隔符分割,反而在首个\n处分割?

问题

调用strtok的代码如下:

char *headers = strtok(NULL, "\n\n");

针对目标字符串:

"Host: 172.27.34.56\nConnection: keep-alive\nDNT: 1\nUpgrade-Insecure-Requests: 1\nUser-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/115.0.0.0 Safari/537.36\nAccept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,/*;q=0.8,application/signed-exchange;v=b3;q=0.7\ncp-extension-installed: Yes\nAccept-Encoding: gzip, deflate\nAccept-Language: de-DE,de;q=0.9,en-US;q=0.8,en;q=0.7\nRange: bytes=85-85\nIf-Range: Wed, 19 Jul 2023 19:15:56 GMT\n\n123"

但函数并未按指定的\n\n分隔符分割,反而在第一个\n处就完成了分割,这是什么原因?

原因分析

strtok的第二个参数是分隔符字符集合,不是完整的字符串分隔符。简单说,"\n\n"在这里会被解析成“单个\n就是分隔符”,而不是“必须连续两个\n才触发分割”。

所以当strtok遍历字符串时,遇到第一个\n就会将其视为分割点,直接截取出前面的Host: 172.27.34.56,这就是你看到的结果。

如果要实现按连续两个\n分割的需求,strtok无法直接完成,你需要自己实现逻辑:比如遍历字符串寻找"\n\n"的位置,或者使用strstr定位分隔符位置后手动分割字符串。

内容的提问来源于stack exchange,提问作者marian

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.14 05:30:09