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

