下面sscanf用法中"%*[^/]/%[^@]",求解释,尤其是第二个/,怎么也想不明白呢?

int main()
{
char * buf[100] = {0,};
sscanf("iios/12DDWDFF@122", "%*[^/]/%[^@]", buf);//[]之外的/什么意思?
printf("%s",buf);
}

这个结果应该是获取/到@之间的字符吧
第一个^/表示非/的字符 而*是忽略符 就是忽略在/之前的非/字符对吧 但是到了/以后 这个斜杠自身还没有被忽略掉 所以还要再忽略掉/自身 于是便将/加在了后面
这个语句其实分成%*[^/]/和%[^@]两个部分 这样应该明白了吧?
或者说括号外的/就是代表字符串中的/ 用来顶替它的位置的。追问

改为sscanf(p, "%*[^//]%[^@]", buf); 则输出/12DDWDFF@122
改为sscanf(p, "%*[^/]%[^@]", buf); 则输出/12DDWDFF@122
只有sscanf(p, "%*[^/]/%[^@]", buf); 输出12DDWDFF@122,怀疑[]外的/有特殊含义
跟“c中\是转义字符 如果要输出\就需要表示为\\ ”没有关系。

温馨提示:答案为网友推荐,仅供参考
第1个回答  2018-07-02
改为sscanf(p, "%*[^//]%[^@]", buf); 则输出/12DDWDFF
改为sscanf(p, "%*[^/]%[^@]", buf); 则输出/12DDWDFF
只有sscanf(p, "%*[^/]/%[^@]", buf); 输出12DDWDFF
第2个回答  2011-04-21
跳过这个分界的/
相似回答