VC Unicode C与ANSI C部分函数对照
最近折腾VS 2008,发现仅会C语言还不够,得会VC 中的C语言。
C源文件的最顶部一定要加:
1 | #include "stdafx.h" |
win32 窗口程序入口点为:
1 2 3 4 | int APIENTRY _tWinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPTSTR lpCmdLine, int nCmdShow) |
而不是
1 | int main(int argc,char ** argv) |
字符变量用TCHAR 而不是 char ,不然有麻烦。
stdafx.h默认没有包含ANSI C的stdio.h,要在stdafx.h添加
1 | #include <stdio.h> |
才能用ANSI C 的fopen等IO函数。
所有字符串都要用TEXT()或者_T() 宏将之括起来,不然也会有麻烦。
1 2 | TCHAR buffer[256]; sizeof(buffer)/sizeof(TCHAR) |
(括号内是宽字符时的表示方式)
TCHAR代替char(wchar_t)
msdn的说明:
1 typedef char TCHAR;还说,TCHAR 可以表示WCHAR 和char ,根据你是否定义了UNICODE 。(TCHAR is defined as wchar_t in a Unicode build, but as char in a non Unicode build. )
http://msdn.microsoft.com/en-us/library/cc842072.aspxLPTCH、PTCH、PTSTR、LPTSRT代替char*(wchar_t*)
LPCTSTR代替const char(const wchar_t*)
TEXT(“string”)代替”string” (L“string”)
wcslen()或者lstrlen(); 代替strlen();
lstrcpy(); 代替strcpy()
lstrcpyn(); 代替strcpyn()
lstrcat(); 代替strcat()
wcscmp() 或者 lstrcmp();代替strcmp() 见http://msdn.microsoft.com/en-us/library/e0z9k731.aspx
另_stricmp, _wcsicmp, _mbsicmp, _stricmp_l, _wcsicmp_l, _mbsicmp_l (注:wcsicmp等已经不建议使用了,用_wcsicmp代替) 见:http://msdn.microsoft.com/en-us/library/k59z8dwe%28v=VS.80%29.aspxlstrcmpi(); 代替strcmpi()
wsprintf();代替sprintf ();(swprintf();)
wvsprintf();代替vsprintf();(vswprintf();)
这样无论我们再Unicode环境还是ASCNII环境,都不用重写代码。
Unicode和ASCII最大的区别就是 Unicode采用2个字节来存储一个字符,而ASCII采用一个字节存储一个字符,所以对于英文的编码,那是足够的了,对于汉字的编码ASCII要用2个ASCII字符来表示一个汉字。




