簡體   English   中英

Unicode,char指針和wcslen

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM