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

在C和C++中如何用反斜杠做分隔符分割字符串并取指定片段?

问题解答

反斜杠转义问题处理

你遇到的转义问题需要分两个场景分别处理:

  • 字符串字面量定义场景:C语言中字符串字面量里的单个\会被识别为转义符,要表示一个真实存在的反斜杠字符,必须连续写两个\。你示例中的字符串写在代码里需要定义为 "abc\\asd\\zxc\\12as",否则\a会被识别为响铃控制符、\12会被识别为八进制转义字符,最终字符串内容和你预期的完全不符。
  • strtok分隔符参数场景:给strtok()传分隔符参数时,同样需要转义反斜杠,分隔符参数要写为 "\\",才能让strtok()识别到你要使用单个反斜杠作为分割标记。

直接获取第三个分割结果的方法

strtok()的调用规则是首次调用传入目标字符串指针,后续每次调用传入NULL即可按顺序获取下一个分割结果。要直接拿第三个结果,连续调用三次strtok()即可,前两次的返回值可以不用处理。
注意要做好非空判断,避免分割结果不足3个时触发空指针访问问题。

完整示例代码

#include <stdio.h>
#include <string.h>

int main() {
    // 定义字符串时转义反斜杠
    char str[] = "abc\\asd\\zxc\\12as";
    char *token;

    // 第一次调用,获取第一个词
    token = strtok(str, "\\");
    // 第二次调用,获取第二个词
    token = strtok(NULL, "\\");
    // 第三次调用,获取第三个词
    token = strtok(NULL, "\\");

    if (token != NULL) {
        printf("第三个分割结果是:%s\n", token);
    } else {
        printf("分割结果不足3个\n");
    }

    return 0;
}

额外注意事项

  • strtok()会修改原字符串的内容,会把分隔符位置替换为\0,如果需要保留原字符串,要先把原字符串拷贝到一份可修改的独立内存中再执行分割操作。
  • strtok()会自动跳过连续的分隔符,不会返回空字符串的分割结果。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.13 12:00:05