3

以下のような文字列があります

 char row[]="11/12/1999 foo:bar some data..... ms:12123343 hot:32";

sscanf を使用して int 変数に 'ms' val を挿入したい。しかし、行の最初のデータを無視するように ssscanf を構成する方法がわかりません。私は打撃を試みますが、仕事をしません。

int i;
sscanf(row,".*ms:%d",i);
4

2 に答える 2

5

sscanf() を使用してデータを無視するのではなく、別の関数を使用して必要な文字列の一部を取得することをお勧めします。

strstr()をお勧めします。例えば

#include <stdio.h>
#include <string.h>

int main(void) {
    char row[] = "11/12/1999 foo:54654 some data..... ms:12123343 hot:32";
    char *ms;
    int i;

    ms = strstr(row, "ms:");
    if (ms == NULL) /* error: no "ms:" in row */;
    if (sscanf(ms + 3, "%d", &i) != 1) /* error: invalid data */;
    printf("ms value is %d.\n", i);
    return 0;
}

ideone で実行されているコードを確認できます。

于 2013-01-01T16:18:53.800 に答える
0

ジョーカーはシェルで使用されますが、キャラクターをこのようsscanfには扱いません。*

7.21.6.2fscanf機能
— オプションの代入抑止文字 *。

いくつかの解決策があります。例えば:

#include <stdio.h>
#include <string.h>

char *pend = strrchr(row, ':');
sscanf(pend, ":%d", &i);

scanfまたはから scanset を使用することもできますstrstr

于 2013-01-01T15:15:30.947 に答える