sscanf_s()
リファレンスページから:
sscanf_s関数は、バッファから各引数で指定された場所にデータを読み取ります。format文字列の後の引数は、formatの型指定子に対応する型を持つ変数へのポインターを指定します。安全性の低いバージョンのsscanfとは異なり、タイプフィールド文字c、C、s、S、および[を使用する場合は、バッファサイズパラメータが必要です。文字単位のバッファサイズは、それを必要とする各バッファの後に追加パラメータとして指定する必要があります。詳細については、scanf_s、_scanf_s_l、wscanf_s、_wscanf_s_l、およびscanfタイプフィールド文字を参照してください。
つまり、各バッファの後にそのサイズを続ける必要があります。
sscanf_s(line, "%s-%s", toto, sizeof(toto), titi, sizeof(titi));
さらに、-
空白ではない文字は"%s"
フォーマット指定子のターミネータとして機能しないため、line
含まれている場合hello-world
は読み込まれtoto
、titi
割り当てられません。-
ターミネータとして使用するには、スキャンセットを使用します。
if (2 == sscanf_s(line, "%[^-]-%s", toto, sizeof(toto), titi, sizeof(titi)))
{
/* Both 'toto' and 'titi' where assigned. */
}