注意:请使用 _swprintf(), 不要使用 wsprintf() !!!

今天才发现一个很大的问题:

wsprintf() 是 windows api, 有 1024 字符限制,不支持浮点输出,没有转化浮点数的功能。

_swprintf() 是c库函数,用法和 sprintf() 一样(格式都一样),_swprintf() 函数格式化字符串可以格式化浮点型,只不过针对的是宽字符。

 

下面是使用 wsprintf():wsprintf 是 windows api, 有 1024 字符限制,不支持浮点输出,没有转化浮点数的功能。

wchar_t arr[1032] = {0};
wchar_t c = 'A';
for (int i = 0; i < 1032; i++)
{
    arr[i] = c;
    c++;

    if(c == 'Z')
    {
        c = 'A';
    }
}

wchar_t arr2[1032] = {0};

wprintf(L"arr2[1026]:'%c'\n", arr2[1026]);

wsprintf(arr2, L"%s", arr); /** 注意: 这里使用 wsprintf, wsprintf 是 windows api, 有 1024 字符限制,不支持浮点输出,没有转化浮点数的功能 **/

wprintf(L"arr2[1026]:'%c'\n", arr2[1026]);

wchar_t arr3[16];
float fv = 3.14f;
wsprintf(arr3, L"%lf", fv); /** 注意: 这里使用 wsprintf, wsprintf 是 windows api, 有 1024 字符限制,不支持浮点输出,没有转化浮点数的功能 **/
wprintf(L"fv:%s\n", arr3);

wchar_t szMsg[64];
_swprintf(szMsg, L"wcslen(arr2):%d", wcslen(arr2));
MessageBox(NULL, szMsg, L"缓冲区大小 ", MB_ICONWARNING);

 

 

 

wchar_t arr[1032] = {0};
wchar_t c = 'A';
for (int i = 0; i < 1032; i++)
{
    arr[i] = c;
    c++;

    if(c == 'Z')
    {
        c = 'A';
    }
}

wchar_t arr2[1032] = {0};

wprintf(L"arr2[1026]:'%c'\n", arr2[1026]);

_swprintf(arr2, L"%s", arr); /** 注意: 这里使用 _swprintf() **/

wprintf(L"arr2[1026]:'%c'\n", arr2[1026]);

wchar_t arr3[16];
float fv = 3.14f;
_swprintf(arr3, L"%lf", fv); /** 注意: 这里使用 _swprintf() **/
wprintf(L"fv:%s\n", arr3);

wchar_t szMsg[64];
_swprintf(szMsg, L"wcslen(arr2):%d", wcslen(arr2));
MessageBox(NULL, szMsg, L"缓冲区大小 ", MB_ICONWARNING);

 

posted @ 2023-05-12 16:31  personnel  阅读(284)  评论(0编辑  收藏  举报
友情链接:图片批量处理工具 gif动态图制作工具 制作电子相册 图片排版工具 制作淘宝主图视频 MKScript 鼠标键盘自动化脚本语言