如何使用sscanf按分隔符拆分字符串?从7b-7a中提取7b
解决sscanf提取'-'前字符串的问题
你的代码问题在于%s会匹配所有非空白字符,而-不属于空白字符,所以第一个%s直接把整个7b-7a都读进了out,后面的-%s完全没起作用,还因缺少对应变量导致未定义行为。
要提取-之前的7b,可以用%[^-]格式说明符,它的作用是匹配所有不是'-'的字符,直到遇到'-'为止:
char str[32] = "7b-7a"; char out[32]; // 读取所有非'-'的字符到out sscanf(str, "%[^-]", out); std::cout << out; // 输出7b
补充说明
- 如果字符串开头就是
-,out会被设为空字符串; - 可以指定最大读取长度增强安全性,比如
%31[^-](给out的结束符\0留一位):sscanf(str, "%31[^-]", out);
内容的提问来源于stack exchange,提问作者inpotk
相关产品推荐
相关产品推荐

