Visual C++ _snprintf setting errno to ERANGE
Visual C++ _snprintf setting errno to ERANGE
我刚刚注意到,当我的代码用Visual c++ 2013编译时,当目标缓冲区太小时,_snprintf函数将errno设置为ERANGE(结果太大)。这似乎没有记录:https://msdn.microsoft.com/en-us/library/2ts7cx93.aspx
我期望返回值为-1(代码也是如此),但不希望对errno进行任何干预。这种行为是否在其他地方有记录,是否可能是最近的更改?c++ 11标准(我相信它增加了snprintf)对此有什么要说的吗?
c++ 11标准(我相信它增加了snprintf)有什么吗怎么说呢?
是的,你所描述的行为对于snprintf
是正确的。C标准之后(参照c++标准):
(7.21.6.5.3)。
snprintf
函数返回需要的字符数n
是否足够大,不包括终止空字符,,如果编码错误则为负值发生。因此,以空结束的输出已经完全写入当且仅当返回值非负且小于n
。
对于errno
-函数描述中没有提到它,所以这适用于:
(7.5.3)。标准库可以将
errno
的值设置为非零函数调用是否有错误,只要使用errno
在此函数的描述中没有文档记录国际标准。
功能符合标准。正如Tomasz所提到的,7.5.3的完整文本说"无论是否有错误,只要在本国际标准的函数的描述中没有记录errno的使用,errno的值都可以被库函数调用设置为非零"。标准中sprintf的描述中没有记录errno的使用,因此库可以自由地将errno设置为非零值。无论微软是否在他们的文档中记录了一些东西,不是7.5.3所涵盖的。
相关文章:
- "error: no matching function for call to"构造函数错误
- 调用专用模板时出错"no matching function for call to [...]"
- C++ Singleton - Prevent ::instance() to variable
- 我的项目不会像"undefined reference to `grpc::g_core_codegen_interface'"那样使用未定义的引用错误进行编译
- Visual Studio Code "undefined reference to `WinMain@16'"
- 使用 GCC 卸载的 OpenMP 卸载失败,并出现"Ptx assembly aborted due to errors"
- 如何解决"invalid conversion from 'char' to 'const char*'"
- 使用 MATLAB 编码器生成C++代码:编译错误"undefined reference to `rgb2gray_tbb_real64'"
- 尝试链接我的着色器时,我收到错误代码"error c5145 must write to gl_position"
- Python str to C++ to Python str
- 为什么创建友元类的实例会导致"undefined reference to"错误?
- System.InvalidCastException - SQL to C++ - safe_cast<float>
- 使用 cmake 的 Linux 终端上的"Conversion to non-scalar type is requested"错误
- "no matching function for call to 'Vector::Vector'"错误
- vector<vector<double>> to mxArray using memcpy
- Tensorflow c++ api undefined reference to 'tflite::D efaultErrorReporter()'
- 当覆盖存在时调用基本虚拟"binded to object"函数
- OpenGL VBO Indexing ( How to compute Index Array)
- 为什么我会" void value not ignored as it ought to be"?
- Visual C++ _snprintf setting errno to ERANGE