"编码错误"是什么意思?在vsnprintf文档中?

时间:2015-01-22 19:09:37

标签: c++ printf

C++ online docs for vsnprintf中,陈述

 If an encoding error occurs, a negative number is returned.

“编码错误”在这种情况下意味着什么,并且可以给出这种错误的一个例子吗?

2 个答案:

答案 0 :(得分:2)

指的是grinch指出的字符串编码错误。我们可以使用此代码重现负返回值,因为在调用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 on Google Groups几乎所有答案。

答案 1 :(得分:0)

让我确认 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。