1. 不管格式化串中是不是使用了%s,都应用_T.
int i, j, k, l;
_stscanf(szText, _T("%d.%d.%d.%d"), &i, &j, &k, &l);
因为不用_T直接就编译错误。
2.输出参数应该是指针。
TCHAR szText[] = _T("一.二.三.四");
TCHAR szTmp[5];
memset(szTmp, 0x00, sizeof(szTmp)/sizeof(TCHAR));
_stscanf(szText, _T("%s.%s.%s.%s"), szTmp[0], szTmp[1], szTmp[2], szTmp[3]);
这不会报编译错误,但运行会崩溃。
正确的方式:
_stscanf(szText, _T("%s.%s.%s.%s"), &szTmp[0],&szTmp[1],&szTmp[2],&szTmp[3]);
3. TCHAR c = _T('a');
TCHAR szText[20];
_stprintf(szText, _T("%s"), c);
会出现崩溃,应该用
_stprintf(szText, _T("%c"), c);
4. TCHAR c = _T('中');
TCHAR szText[20];
_stprintf(szText, _T("%c"), c);
%c在unicode环境下就表示2个字节了,记住一点:%c表示格式化一个符号,跟字节数无关
5. 单个字符也要用_T, _T('中'),,,字符间比较自然也要用 _T('c') >= _T('a')
6. BYTE类型可以用%d格式化
BYTE b = 255;
TCHAR szText[20];
_stprintf(szText, _T("%d"), b);
OutputDebugString(szText);