0

我有这个:

#include<stdio.h>
#include<string.h>
int main(void)
{
    int ret;
    int major =0, minor= 0, build =0, revision =0;
    char entry[16];
    strcpy(entry,"1.2");
    ret = sscanf(entry,"%d.%d.%d.%d", &major, &minor, &build, &revision);
    printf("sscanf(""%s"") returned %d\r\n", entry, ret);
    printf("major=%d, minor=%d, build=%d, revision=%d\r\n",
        major, minor, build, revision);
    return ret;
}

Aftersscanf被调用,ret是-1,但前两个条目被填充(主要是1,次要是2)。我原以为ret是 2。我不知道出了什么问题。

4

1 回答 1

1

好的,我想我找到了问题所在。在 VS 2013 下该行为是正常的(它可以工作)。但 CVI 版本(National Instruments)根本不遵守规则。

CVI 下的 sscanf() 在仅发生部分匹配时返回 -1,但它会进行部分匹配。它对 errno 也没有任何作用,显然,scanf 函数可以忽略。

所以 'answer' 是 CVI 下 sscanf 的不兼容版本。

如果有人想发布答案,我会接受并相信它。

于 2015-05-18T13:30:51.993 回答