关于字符集
不太清楚
这个几个东西
_tcscmp
strcmp
wstrcmp
StrCmp
[解决办法]
早啊,上班前先回个贴子:)
strcmp 是用于 assii 字符集的
wstrcmp 是用于 Unicode 字符集的
_tcscmp 其实调用的是 strcmp 或者 wstrcmp 具体根据你的工程字符集属性配置,在工程属性面版里
StrCmp 是操作系统函数, 虽然说都是比较字符串,但一般这个函数更优越些,因为它是操作系统函数
但是它的功能并不完全和上面的c函数一样,它应该调用的是api CompareString
随便说一下,说错了请星辰老大指出
98 是 assii 系统
2000 是 unicode 系统,也支持 assii,在2000内部,所有api都是用unicode实现
如果你调用的是assii版本的api如 CreateWindowA 那么实际上系统会做内存分配,先转成uncode
字符,如果调用 CreateWindowW
所以在2000的机器上uncode程序比assii程序性能好很多
你们可以测测
#include "mmsystem.h "
#include "shlwapi.h "
#pragma comment(lib, "winmm.lib ")
#pragma comment(lib, "shlwapi.lib ")
void main()
{
TCHAR ch[] = _T( "testtesttesttest ");
DWORD s = timeGetTime();
for (int i = 0; i < 10000000; i++)
{
//StrCmp(ch, _T( "testtesttesttest "));
_tcscmp(ch, _T( "testtesttesttest "));
}
DWORD d = timeGetTime();
cout < <d - s < <endl;
system( "pause ");
}
我的系统输出的时间差分别是
unicode _tcscmp : 1000
assii _tcscmp : 4000
unicode StrCmp : 950
assii StrCmp : 4100
都是debug版
大家可以把你们的结果列出来看看
[解决办法]
_tcscmp一个宏
根据程序使用的编码 在编译前 替换成 strcmp 或者 wstrcmp
strcmp和wstrcmp区别在于前者使用ascii后者使用unicode(双字节)编码
StrCmp也是一个宏
根据不用的编码替换成StrCmpA或者StrCmpW
前者使用ascii后者使用unicode(双字节)编码