一連の呼び出しをsscanf()
行い、その後、文字列ポインターを更新して、次のsscanf()
ように消費されていない最初の文字を指す関数があります。
if(sscanf(str, "%d%n", &fooInt, &length) != 1)
{
// error handling
}
str+=length;
これをクリーンアップし、これを何度も複製しないようにするために、これを次のような便利なユーティリティ関数にカプセル化したいと思います。
int newSscanf ( char ** str, const char * format, ...)
{
int rv;
int length;
char buf[MAX_LENGTH];
va_list args;
strcpy(buf, format);
strcat(buf, "%n");
va_start(args, format);
rv = vsscanf(*str, buf, args, &length); //Not valid but this is the spirit
va_end(args);
*str += length;
return rv;
}
次に、追加のパラメーター/簿記を削除するために、以下のように呼び出しを簡素化できます。
if(newSscanf(&str, "%d", &fooInt) != 1)
{
// error handling
}
残念ながら、&length
パラメーターを arg リストの末尾に直接追加する方法、または .xml 内に追加する方法が見つかりませんnewSscanf()
。これを回避する方法はありますか、それとも、呼び出しごとに手作業で簿記を処理するのと同じくらいうまくいきますか?