0

"[first something]=[second something"] のような構造の文字列があります。

sscanf はそれらを分離する方法だと思います!

ただし、スキャンは %n でオフセットを正しく報告しません。

コード行は次のようになります。

char data[100];
char source[] = "username=katy"
int offset=-1;
sscanf([source],"%[^=],%s%n",data,&offset)
printf("sscanf is reporting %s with an offset of %i\n"

)

ただし、出力は常に次のようになります。

sscanf is reporting username with an offset of -1

誰かが私のためにこれを片付けてくれるほど親切でしょうか?

(はい、これによりバッファ オーバーフロー エラーが発生しやすくなることはわかっています。これは、コードの少し前の方で保証されています...)

4

1 に答える 1

3

scanfフォーマット文字列のカンマは意味がありません。の代わりに"%[^=],%s%n"、 を試してください"%[^=]=%s%n"。また、両方の文字列にフィールド幅の制限を設定する必要があります。そうしないと、宛先バッファーがオーバーフローする可能性があり、渡した引数が少なすぎますsscanf(文字列の 1 つだけで、他の文字列ではありません)。

コードの修正版は次のようになります。

char key[100], data[100];
char source[] = "username=katy"
int offset=-1;
sscanf(source,"%99[^=]=%99s%n",key,data,&offset)
printf("sscanf is reporting %s with an offset of %i\n", data, offset);
于 2013-06-12T22:14:11.957 に答える