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
相关产品推荐
相关产品推荐

