代码之家  ›  专栏  ›  技术社区  ›  FrankS101

MSVC++15+中的SScanf是否发生了更改?

  •  3
  • FrankS101  · 技术社区  · 6 年前

    给出以下代码段:

    #include <iostream>
    #include <cstring>
    #include <cstdio>
    
    int main()
    {
        char color[256];
        float c,m,y,k;  
        const char* arguments = "0.8500 1 0 0 (Violet)";
        memset(color, 0, 256 * sizeof(char));
        if (sscanf(arguments, "%f %f %f %f %256c", &c, &m, &y, &k, color) == 5)
            std::cout << color; 
    }
    

    这已经在生产和工作至少10到15年(它输出颜色名称):

    (紫罗兰色)

    但是,使用最新的Microsoft Visual Studio编译器,或者在MSVC++15中,结果也发生了变化。 结果不是5,而是4。 使用gcc或clang的结果也是5,就像以前版本的msvc++。这段代码中有什么问题吗,或者有人知道编译器之间这些不同结果的原因吗?

    1 回复  |  直到 6 年前
        1
  •  4
  •   Sander De Dycker    6 年前

    "%256c"

    "%255s"