Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/158.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 仔细检查我的知识:Unicode_C++ - Fatal编程技术网

C++ 仔细检查我的知识:Unicode

C++ 仔细检查我的知识:Unicode,c++,C++,有一种方法:SCardListReaders 在MSDN上有一个例子 在这通电话之后: LPTSTR pmszReaders = NULL; LPTSTR pReader; lReturn = SCardListReaders(hSC, NULL, (LPTSTR)&pmszReaders,

有一种方法:SCardListReaders

在MSDN上有一个例子

在这通电话之后:

LPTSTR          pmszReaders = NULL;
LPTSTR          pReader;
lReturn = SCardListReaders(hSC,
                           NULL,
                           (LPTSTR)&pmszReaders,
                           &cch );
存在这样的代码,它从多字符串
pmszReaders
中提取字符串(多字符串以双空字符结尾)

我的问题是。我认为上面的代码只适用于Unicode,对吗?若我在我的项目中禁用Unicode支持,我认为上面的代码片段将无法正确提取阅读器名称?不是吗


例如,当我选中
wcslen
时,设置Unicode时返回22,未设置Unicode时返回24。

如果希望函数在Unicode或MBCS构建中工作,请使用Microsoft特定的
\u tcslen
而不是
wcslen


如果有人试图在没有Unicode的情况下使用函数,您希望出现编译时错误,请将
LPTSTR
更改为
LPWSTR

Hi Mark,是的,这就是我所理解的,我可能必须将
wcslen
替换为
\tcslen
,并将
wchar\t*
转换为
TCHAR*
,对吗?所以我的假设是正确的,确实上面的代码只适用于Unicode,对吗?@user2568508,如果你做得正确,那么转换到
wchar\t*
应该是不必要的。是的,您使用
wcslen
的原始代码只能在Unicode(UTF-16)上工作。嗯。。好的,一开始我有点惊讶,因为它是来自MSDN的样本,但无论如何还是要感谢。@delnan,Microsoft将UTF-16称为Unicode,所以很难指责某人使用了相同的术语。我真希望他们从来没有那样做过。@MarkRansom我知道(我也和你一样不高兴)。但因为我怀疑OP还不知道,所以我想最好能引起大家的注意。@delnan:delnan谢谢你的回答,尽管我不太明白你的意思。至少现在这个问题已经解决了,就像我刚才问的那样。@user2568508我的意思是,你和微软所谓的“Unicode”只是一种特定的Unicode编码,称为UTF-16。由于还有其他几种Unicode编码,所以更准确地说是“UTF-16”,更重要的是,如果您想支持Unicode应该支持的许多语言,记住UTF-16的局限性是绝对重要的。
pReader = pmszReaders;

while ( '\0' != *pReader )
{

     // Display the value.
     printf("Reader: %S\n", pReader );

     // Advance to the next value.
    pReader = pReader + wcslen((wchar_t *)pReader) + 1;
}