修正できないように見える小さな問題があります。文字列があるとします。
buffer = "1 1 X ./simple E"
そして、2つの整数、2つの文字、およびファイル名を抽出したいのですが、
sscanf(buffer, "%d %d %c %s %c, &a, &b, &c, d, &e);
printf("%d %d %c %s %c", a, b, c, d, e);
思ったほど返ってこない。「11 1 X (ヌル)」と出ます。どんな助けでも感謝します。
c と e は、int または char にすることができます。d[100] のオーバーフローの問題に注意してください。
int a, b, c, e;
char d[100];
sscanf(buffer, "%d %d %c %s %c, &a, &b, &c, d, &e);
printf("%d %d %c %s %c", a, b, c, d, e);
を宣言しchar *d
ていますが、ポイントする有効な場所がないため失敗します。十分なスペースがある配列を使用すると、次のことができます。
#include <stdio.h>
#include <string.h>
int main()
{
int a, b;
char c, e;
char d[20];
char buffer[] = "1 1 X ./simple E";
sscanf(buffer, "%d %d %c %s %c", &a, &b, &c, d, &e);
printf("%d %d %c %s %c", a, b, c, d, e);
}
出力:1 1 X ./simple E
sscanf 関数の引数に空白区切り文字は必要ありません。
sscanf(buffer, "%d%d%c%s%c", &a, &b, &c, d, &e);
%d
はバッファを読み取るときに空白で区切られており、 と の間にスペースがあってはなりません。スペースが%c
飲み込ま%s
れ、文字と文字列の間にセパレータがないバッファが残ります。