用于Windows CE的snprintf

时间:2014-10-02 09:29:47

标签: c visual-studio printf windows-ce

我的程序在多个平台上运行。其中,Windows CE。目前,sprintf被广泛使用,导致缓冲区溢出等问题很多。我想用snprintf调用替换它们。对于Visual Studio,我发现了这个问题,它解决了问题的win32部分:

snprintf and Visual Studio 2010

但我无法让它适用于Windows CE,因为函数_vsnprintf_s_vscprintf以及常量_TUNCATE不可用。有没有人知道在Windows CE上复制snprintf(linux)行为的方法?

3 个答案:

答案 0 :(得分:1)

到目前为止,我已经完成了以下功能:

int my_snprintf(char* str, size_t size, const char* format, ...)
{
    int len = 0;
    va_list ap;

    if (size == 0)
    {
        return 0;
    }

    va_start(ap, format);
    len = _vsnprintf(str, size, format, ap);
    va_end(ap);

    if (len < 0 || len >= size)
    {
        len = size - 1;
    }

    if (size > 0)
    {
        str[size - 1] = '\0';
    }

    return len;
}

初步测试看起来没问题,甚至可以为WinCE编译..任何反馈都非常感谢

答案 1 :(得分:0)

我认为,您可以使用Microsoft特定的printf_s功能。我不确定它是100%兼容的,我认为当size为0时它不允许缓冲区为空,但它可能足以满足您的要求......我没有VS2010来确认{{1}在Windows CE版本中存在。

答案 2 :(得分:0)

Windows CE下的_snprintf:

http://msdn.microsoft.com/en-us/library/ms861145.aspx

但其行为与标准略有不同,请阅读:Is snprintf() ALWAYS null terminating?