0

修正できないように見える小さな問題があります。文字列があるとします。

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 (ヌル)」と出ます。どんな助けでも感謝します。

4

4 に答える 4

0

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);
于 2013-09-10T02:20:53.307 に答える
0

を宣言し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

于 2013-09-10T02:21:00.783 に答える
0

sscanf 関数の引数に空白区切り文字は必要ありません。

sscanf(buffer, "%d%d%c%s%c", &a, &b, &c, d, &e);

%dはバッファを読み取るときに空白で区切られており、 と の間にスペースがあってはなりません。スペースが%c飲み込ま%sれ、文字と文字列の間にセパレータがないバッファが残ります。

于 2013-09-10T02:21:27.830 に答える