以下のような文字列があります
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);
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 で実行されているコードを確認できます。
ジョーカーはシェルで使用されますが、キャラクターをこのようsscanf
には扱いません。*
7.21.6.2
fscanf
機能
— オプションの代入抑止文字 *。
いくつかの解決策があります。例えば:
#include <stdio.h>
#include <string.h>
char *pend = strrchr(row, ':');
sscanf(pend, ":%d", &i);
scanf
またはから scanset を使用することもできますstrstr
。