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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.26 02:36:04