如何设置sscanf()忽略字符串开头的字符?

时间:2013-01-01 15:08:25

标签: c++ c scanf

我有一个字符串,如下所示

 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);

2 个答案:

答案 0 :(得分: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;
}

您可以看到code running at ideone

答案 1 :(得分:0)

小丑在shell中使用,但sscanf不会以这种方式处理*字符。

  

7.21.6.2 fscanf功能
   - 可选的赋值抑制字符*。

有几种解决方案。例如:

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

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

您还可以使用scanfstrstr中的扫描集。