次の文字列を sscanf で解析しようとしています。
query=testword&diskimg=simple.img
sscanf を使用して「testword」と「simple.img」を解析するにはどうすればよいですか? sscanf のデリミタ引数は本当に私を混乱させます:/
ありがとうございました!
「テストワード」の長さが常に8文字になることがわかっている場合は、次のように実行できます。
char str[] = "query=testword&diskimg=simple.img";
char buf1[100];
char buf2[100];
sscanf(str, "query=%8s&diskimg=%s", buf1, buf2);
これで、buf1には「testword」が含まれ、buf2には「simple.img」が含まれます。
または、testwordの前に常に=が付き、その後に&が続き、simple.imgの前に常に=が付いていることがわかっている場合は、次を使用できます。
sscanf(str, "%*[^=]%*c%[^&]%*[^=]%*c%s", buf1, buf2);
かなりわかりにくいので、ここに要約を示します。各%は、テキストのチャンクの開始を示します。%の後に*がある場合は、そのチャンクを無視し、バッファの1つに格納しないことを意味します。角かっこ内の^は、このチャンクに角かっこ内の文字ではない任意の数の文字が含まれていることを意味します(^自体を除く)。%sは任意の長さの文字列を読み取り、%cは単一の文字を読み取ります。
要約すると: