注意:请使用 _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);