使用strtok读取逗号分隔字符串时遇空字符出现偏移问题
strtok处理连续分隔符时的行为细节
当用strtok处理逗号分隔的字符串时,它不会识别连续分隔符之间的空字段,而是直接跳过所有连续的分隔符,导致空值被忽略,后续内容的读取位置偏移。
示例代码
int main(void) { char Temp[10] = "1,2,3,,4"; printf("%s\n", strtok(Temp, ",")); printf("%s\n", strtok(NULL, ",")); printf("%s\n", strtok(NULL, ",")); printf("%s\n", strtok(NULL, ",")); printf("%s\n", strtok(NULL, ",")); }
预期输出
1 2 3 (null) 4
实际输出
1 2 3 4 (null)
strtok的核心逻辑是:每次调用时,会从当前位置开始跳过所有匹配的分隔符,直到找到第一个非分隔符字符,才开始截取到下一个分隔符的内容。如果遇到连续的分隔符,它会一直跳过,不会返回空字符串。哪怕存在多个连续空值(即多组连续分隔符),它也会持续跳过所有分隔符,而非只偏移一次,最终导致空字段完全被忽略。
内容的提问来源于stack exchange,提问作者TheRecon007
相关产品推荐
相关产品推荐

