3

我有一个字符串如下

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

我想使用 sscanf 将 'ms' val 插入到 int 变量中。但我不知道如何配置 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或的扫描集strstr

于 2013-01-01T15:15:30.947 回答