vsnprintf 文档中"encoding error"的含义是什么?
What is the meaning of "encoding error" in the vsnprintf documentation?
在 vsnprintf 的C++在线文档中,有说明
If an encoding error occurs, a negative number is returned.
在这种情况下,"编码错误"是什么意思,是否可以举例说明这种错误?
正如格林奇指出的那样,它指的是字符串编码错误。我们可以用这个代码重现一个负返回值,因为调用 wctomb
时,129 是日语 (932) 代码页中无效的宽字符:
int call_vsnprintf(char* buf, int max, char* format, ...)
{
va_list args;
va_start(args, format);
#pragma warning (suppress : 4996)
int result = vsnprintf(buf, max, format, args);
va_end(args);
return result;
}
int _tmain(int argc, _TCHAR* argv[])
{
setlocale(LC_ALL, ".932");
char dest[100];
wchar_t wbuf[2];
wbuf[0] = 129;
wbuf[1] = 0;
//this will be -1
int result = call_vsnprintf(dest, sizeof(dest), "%ls", wbuf);
}
注意:这是在Windows上,但如果它不是可移植的,可以通过在亚洲代码页中搜索强制wctomb返回-1的宽字符来轻松修复。
感谢谷歌网上论坛上的詹姆斯·凯珀(James Kuyper)提供了几乎完整的答案。
让我确认一下 Debian Millie Smith 的回答:
char dest[100];
wchar_t wbuf[2];
wbuf[0] = 129;
wbuf[1] = 0;
int result = snprintf(dest, sizeof(dest), "%ls", wbuf);
结果为 -1。
相关文章:
- 为不同配置设置MSVC_RUNTIME_LIBRARY的正确方法是什么
- C++避免重复声明的语法是什么
- 在C++中,将大的无符号浮点数四舍五入为整数的最佳方法是什么
- 实现无开销push_back的最佳方法是什么
- C++从另一个类访问公共静态向量的正确方法是什么
- "throw expression code" 1e7 >返回 d 是什么?投掷标准::overflow_error( "too big" ) : d;意味 着?
- C++中名称篡改的目的是什么
- 在 c++ 中拥有一组结构的正确方法是什么?
- 这个指针和内存代码打印是什么?我不知道是打印垃圾还是如何打印我需要的值
- 是什么阻止DOMTimerCoordinator::NextID进入无休止的循环
- 实现此"on error, throw"回调的最佳方法是什么?
- 是什么导致了代码中出现"error LNK2005: already defined in .obj"错误?
- "[Error] expected unqualified-Id before 'if'"这个代码块是什么意思
- "error: not declared in this scope?"是什么意思
- "Misaligned address error"是什么意思?
- vsnprintf 文档中"encoding error"的含义是什么?
- "error: ’myfn’ declared as function returning a function"是什么意思?
- "error : a nonstatic member reference must be relative to a specific object"是什么意思?
- "complex-functions.cpp:57:25: error: expected initializer before ‘add’" 这是什么意思?
- OSX "error: cannot convert 'const std::__cxx11::basic_string<char>"是什么意思?