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

C语言使用sscanf解析带括号的字符串时匹配异常如何解决?

问题排查
  • 格式串语法混用:错误将%s和扫描集语法%[^)]组合使用,%s默认匹配所有非空白字符,会直接把Saturday)完整写入weekday变量,后续所有格式匹配全部错位,无法正确读取月份、日期、年份的值。
  • 格式匹配逻辑错误:没有显式匹配右括号),原字符串左括号后是星期,紧接着是右括号,需要在读取星期后主动匹配该右括号,才能正确对齐后续的月份字段。
正确实现
#include <stdio.h>
#include <string.h>

int main() {
    int day, year;
    char weekday[20], month[20], dtm[100];

    strcpy(dtm, "(Saturday) March 25 1989");
    // 格式串说明:
    // ( : 匹配原字符串开头的左括号
    // %[^)] : 匹配所有不是)的字符,存入weekday,遇到)就停止
    // ) : 匹配原字符串里星期后面的右括号
    // 后续依次匹配空格、月份、日期、年份
    sscanf(dtm, "(%[^)]) %s %d %d", weekday, month, &day, &year);

    printf("%s %d, %d = %s\n", month, day, year, weekday);
    return 0;
}

运行输出

March 25, 1989 = Saturday

完全符合预期变量取值要求。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.03 02:51:01