C语言如何从字符串中提取包含空值的所有token?
strtok分割字符串保留空token的实现方法
标准库的strtok函数原生会将连续多个分隔符识别为单个分隔符,因此你代码中45.6和V*00之间的连续逗号对应的空token会被直接忽略,这是strtok的固有特性,无法通过传参调整实现空token保留。
要实现保留空值的分割,可以借助strcspn函数手动处理分割逻辑,实现代码如下:
#include <stdio.h> #include <string.h> int main() { char string[200] = "$GNGNS,103600.01,5114.51176,N,00012.29380,W,45.6,,,V*00"; char *current_ptr = string; while (1) { // 计算当前位置到下一个逗号的字符长度 size_t token_len = strcspn(current_ptr, ","); // 打印对应长度的token,长度为0时自动输出空行 printf("%.*s\n", (int)token_len, current_ptr); // 已经遍历到字符串末尾则退出循环 if (current_ptr[token_len] == '\0') { break; } // 指针移动到下一个分隔符的后一位 current_ptr += token_len + 1; } return 0; }
上述代码运行后就会输出你预期的结果,连续逗号对应的空token会以空行的形式正常打印。如果需要将分割得到的token存储下来后续使用,可以在每次计算出token_len后,申请对应长度的内存拷贝内容即可,空token直接存储空字符串。
内容的提问来源于stack exchange,提问作者lei lei
相关产品推荐
相关产品推荐

