[英]Unicode, char pointers and wcslen
我一直在嘗試將cpw庫用於某些圖形處理。 我設置好了,似乎在編譯時遇到了問題。 即,在字符串標頭中,它通過提供對unicode的支持
#if defined(UNICODE) | defined(_UNICODE)
#define altstrlen wstrlen
#else
#define altstrlen strlen
現在,在Windows afaik上沒有wstrlen這樣的東西,所以我嘗試將其更改為wcslen,但是現在它給了我一個錯誤,因為它試圖將char *轉換為wchar_t *。 我有點害怕,如果我只是以任意一種方式使用它,那么其他事情就會搞砸了。
您如何看待stackoverflow?
也許可以在包含lib標頭之前將wcslen
定義為wstrlen
:
#define wstrlen wcslen
#include "cpw.h"
您收到的錯誤很可能是由於您將char*
傳遞給某些東西而最終調用了其中一個函數。
如果您的數據是基於char *開頭的,則無需調用Unicode版本的strlen(),只需單獨使用常規的strlen(),因為它將char *作為輸入。 除非您的char *數據實際上是UTF-8編碼的,並且您試圖確定未編碼的Unicode長度,否則在這種情況下,您需要先解碼UTF-8,然后再調用wcslen()。
Visual Studio已經有這樣的宏,請參見tchar.h
。
#include <tchar.h>
TCHAR *str = _T("Sample text");
int len = _tcslen(str);
-將根據編譯器設置在ANSI,MBCS和UNICODE模式下工作。
有關更多詳細信息,請參見本文 。
如果在Windows上使用Unicode,則需要將所有字符類型都更改為wchar_t
。 那意味着,而不是:
char *str = "Hello World";
int len = strlen(str);
你需要:
wchar_t *str = L"Hello World";
int len = wcslen(str);
注意,字符類型已更改為wchar_t
,並且字符串文字以L
為前綴。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.