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

C语言中能否用sscanf跳过字符串单个字符且无需拼接?

在C语言中用sscanf跳过字符直接生成目标字符串的方法

可以做到,不需要用strcat拼接。你之前的格式串"%%%"是错误的,%%在格式串里用来表示字面量%,完全不符合需求。

针对你的例子,要把"a_word"转换成"a word",可以通过指定目标数组的不同偏移位置,结合sscanf的赋值抑制符实现:

char a_word[10] = "a_word";
char b_word[10];

// 读取第一个字符到b_word[0],用%*c跳过下划线,读取后续字符串到b_word[2]
sscanf(a_word, "%c%*c%s", &b_word[0], b_word + 2);
// 在中间插入空格
b_word[1] = ' ';

如果要处理更通用的场景(比如第一个部分是多字符,例如"hello_world"),可以用%[^_]读取下划线前的所有字符,配合%n记录读取长度,再插入空格:

char a_word[20] = "hello_world";
char b_word[20];
int part_len;

// 读取下划线前的内容,记录长度,跳过下划线,读取后续内容到对应位置
sscanf(a_word, "%[^_]%n%*c%s", b_word, &part_len, b_word + part_len + 1);
// 插入空格分隔
b_word[part_len] = ' ';

核心逻辑说明:

  • %[^_]:匹配并读取所有非下划线的字符,直到遇到下划线停止
  • %*c:*是赋值抑制符,读取下划线但不存储到变量中
  • %n:记录当前已读取的字符数,用来确定空格插入的位置
  • 直接指定后续字符串的存储位置为第一个部分末尾+1,预留空格位置

这种方式无需拼接操作,完全通过sscanf的格式控制和数组偏移实现目标。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.02 10:33:18