none
StringCchLenght & StringCbLength 函数问题 RRS feed

  • 问题

  • 请看如下代码
    #include <windows.h>
    #include <tchar.h>
    #include <strsafe.h>
    #include <stdio.h>
    
    void __cdecl _tmain(int argc, TCHAR *argv[])
    {
    	HRESULT hr;
    	LPTSTR lpszStr = TEXT("你好");
    	size_t cbBytes;
    	size_t nCharacters;
    	
    	hr = StringCbLength(lpszStr, STRSAFE_MAX_CCH * sizeof(TCHAR), &cbBytes);
    	if (FAILED(hr))
    		_tprintf(TEXT("Calling StringCbLength failed. Error Code: %d\n"), GetLastError());
    	else
    		_tprintf(TEXT("Bytes of string \"%s\": %d\n"), lpszStr, cbBytes);
    	
    	hr = StringCchLength(lpszStr, STRSAFE_MAX_CCH, &nCharacters);
    	if (FAILED(hr))
    		_tprintf(TEXT("Calling StringCchLength failed. Error Code: %d\n"), GetLastError());
    	else
    		_tprintf(TEXT("Characters in string \"%s\": %d\n"), lpszStr, nCharacters);
    }
    

    我用 cl Hello.c 编译运行没问题,但如果我用 cl /D "UNICODE" /D "_UNICODE" Hello.c 编译运行后发现错误了,如下图
    我应该如何修改代码?

    Hey guy, what's up
    2011年11月1日 3:38

答案

  • 编码的问题,在输出中文的代码前面加上
    setlocale(LC_ALL, "chs");
    试试

    或者您使用WriteConsole()函数输出。多字节编码或者Unicode编码都可以成功输出数据。

    TCHAR buf[] = _T("Hello,你好!\n");
     DWORD dwWrite = 0;
     WriteConsole(GetStdHandle(STD_OUTPUT_HANDLE), buf, _tcslen(buf), &dwWrite, NULL);


    2011年11月1日 9:17
    版主