漫談sscanfの高度な特性
1707 ワード
フォーマット出力API、printf、sprintf、vsprintfなどはすでに知られており、使用規則も手のひらのように知られています.
例えば%d,%s,%p,%02 dなど;
sscanfはかなり使われていませんが、その使い方はよく使われる%d、%s、%cなどのほかに「^」、「[」、「]」、「*」などがあります.
1.「^」は正規表現の^作用と一致し、非に相当する.
2.「[」,「]」は、正規表現の[,]と同様に、値の範囲に相当するペアで使用されます.
3.「*」は無視を表し、正規表現の*とN個の類似値をとる作用に違いがある.
関数のプロトタイプ:
int sscanf_s( const char *buffer, const char *format [, argument ] ... );
戻り値は、一致するフィールドの数を表します.
例を見てみましょう.
第1例:整形をフォーマットし、非デジタル範囲のasciiコードに遭遇したときにマッチングを停止し、iDst=1234;
第2の例:フォーマットバイト、1バイトのみフォーマット、szDst=1、後の31バイトは配列を初期化するときのデフォルト値です.
3つ目の例:文字列のフォーマット、szDst=1234_abc_ そして'0'で終わる.
4つ目の例:固定長文字列をフォーマットします.szDst=12です.長さが最も長いフォーマットが2つ指定されているため、%2 sです.
5つ目の例:文字列マッチングのフォーマットの場合は一致を停止し、szDst=1234
6つ目の例:文字列をフォーマットし、一致を無視し、0~9と_を無視します.文字、および_の場合は一致を停止し、szDst=abc
以上の例はいずれも同時に1つだけ一致している.複数に一致する場合は?単純加和と言える
7つ目の例では、整形と文字列をフォーマットし、iDst=1234、szDst=abc_
第8例、同時に整形、ジャンプフォーマット文字列をフォーマットし、iDst=1234、szDst=abc、中間の_ジャンプされました.
この関数に加えて、対応するバリエーションsscanf_があります.l,wバージョンなど.
例えば%d,%s,%p,%02 dなど;
sscanfはかなり使われていませんが、その使い方はよく使われる%d、%s、%cなどのほかに「^」、「[」、「]」、「*」などがあります.
1.「^」は正規表現の^作用と一致し、非に相当する.
2.「[」,「]」は、正規表現の[,]と同様に、値の範囲に相当するペアで使用されます.
3.「*」は無視を表し、正規表現の*とN個の類似値をとる作用に違いがある.
関数のプロトタイプ:
int sscanf_s( const char *buffer, const char *format [, argument ] ... );
戻り値は、一致するフィールドの数を表します.
例を見てみましょう.
const char* src = "1234_abc_";
char szDst[32];
int iDst;
sscanf(src, "%d", &iDst); //<! 1)
sscanf(src, "%c", szDst); //<! 2)
sscanf(src, "%s", szDst); //<! 3)
sscanf(src, "%2s", szDst); //<! 4)
sscanf(src, "%[^_]", szDst); //<! 5)
sscanf(src, "%*[0-9_]%[^_]", szDst); //<! 6)
sscanf(src, "%d%s", &iDst, szDst); //<! 7)
sscanf(src, "%d_%s", &iDst, szDst); //<! 8)
第1例:整形をフォーマットし、非デジタル範囲のasciiコードに遭遇したときにマッチングを停止し、iDst=1234;
第2の例:フォーマットバイト、1バイトのみフォーマット、szDst=1、後の31バイトは配列を初期化するときのデフォルト値です.
3つ目の例:文字列のフォーマット、szDst=1234_abc_ そして'0'で終わる.
4つ目の例:固定長文字列をフォーマットします.szDst=12です.長さが最も長いフォーマットが2つ指定されているため、%2 sです.
5つ目の例:文字列マッチングのフォーマットの場合は一致を停止し、szDst=1234
6つ目の例:文字列をフォーマットし、一致を無視し、0~9と_を無視します.文字、および_の場合は一致を停止し、szDst=abc
以上の例はいずれも同時に1つだけ一致している.複数に一致する場合は?単純加和と言える
7つ目の例では、整形と文字列をフォーマットし、iDst=1234、szDst=abc_
第8例、同時に整形、ジャンプフォーマット文字列をフォーマットし、iDst=1234、szDst=abc、中間の_ジャンプされました.
この関数に加えて、対応するバリエーションsscanf_があります.l,wバージョンなど.