私が必要とするのは:
1) sscanf が行うように文字列から読み取る 2) sscanf が "%n" を使用して行うように、処理されたシーケンスの長さを測定する 3)format
上記の引数とその他の引数を受け入れる (それを制御しない)
それを行う方法はありますか?
size_t read = 0; //Accumulator of the length of processed characters
void readfn (char* source_string, char* fmt, va_list args)
{
int length;
size_t fmtlen = strlen(fmt);
char* fmt_and_lenght = (char*)realloc(fmt, fmtlen + 3);
fmt_and_length[fmtlen] = '%';
fmt_and_length[fmtlen + 1] = 'n';
fmt_and_length[fmtlen + 2] = '\0';
va_list args_and_length = va_append(args, length); //here is the problem, i need to add &length to the list (i dont care if the list is created from scretch
vsscanf(source_str, fmt_and_length, args_and_length); //here i finally capture the length of processed string
read += length; //and i do whatever i wanted to do with it
}
fmtに「%n」が含まれておらず、引数リストが以前にそれをキャプチャしていなかったとしても、消費された文字数を単純にカウントしますか?
編集: vsnscanf があれば、処理された文字数を取得する名前があれば間違いなく良いでしょう。しかし、フォーマット文字列をエスケープされていない % で分割することでこれを解決しました。* が続かない場合は、1 つの引数をフェッチし、繰り返しすべての引数を処理します。そのたびに「%n」を追加し、最後に長さを合計します。