0


0

ランニング:

#含める

int main(int argc、char * argv []){const char * exp = "10-2 3 * 5"; char tok [255]; sscanf(exp、 "%[^  -  * / ^]"、tok); printf( "%s \ n"、tok); sscanf(exp、 "%[^  -  * / ^]"、tok); printf( "%s \ n"、tok); 0を返します。 }

出力します:

10-2 10

しかし、なぜ?

1 Answer


2


ハイフンを `[…​]`セットの最後に置きます。 これは正規表現に似ています。

sscanfの %[…​]`フォーマットは範囲を受け入れます。 範囲は次のように使うことができます: `%[a-z]

普通のハイフンとの一致を区別するためには、それを最後に置く必要があります。そのため、範囲としては解釈されません。

あなたはhttp://www.freebsd.org/cgi/man.cgi?query=sscanfでより多くのドキュメンテーションを見つけることができます `[`パターンが記述されているセクションまでスクロールします。