Unicode,char指针和wcslen

时间:2010-07-28 00:23:53

标签: c++ unicode wchar-t

我一直在尝试将cpw库用于某些图形事物。我设置了它,我似乎在编译问题。   即,在字符串头中,它通过

提供对unicode的支持
#if defined(UNICODE) | defined(_UNICODE)
#define altstrlen wstrlen
#else
#define altstrlen strlen

现在,在Windows上没有像wstrlen这样的事情,所以我尝试将其更改为wcslen,但现在它给了我和错误,因为它试图将char *转换为wchar_t *。我有点害怕如果我只是用它来使用strlen,那么其他东西就会搞砸了。

您认为stackoverflow是什么?

4 个答案:

答案 0 :(得分:1)

也许您可以在包含lib标头之前将wcslen定义为wstrlen

#define wstrlen wcslen
#include "cpw.h"

您获得的错误可能是由于您将char*传递给最终调用其中一个函数的内容。

答案 1 :(得分:1)

如果您的数据基于char *开头,则无需调用strite()的Unicode版本,只需使用常规strlen(),因为它将char *作为输入。除非您的char *数据实际上是UTF-8编码,并且您正在尝试确定未编码的Unicode长度,在这种情况下,您需要首先解码UTF-8,然后再调用wcslen()。

答案 2 :(得分:0)

如果您在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

答案 3 :(得分:0)

Visual Studio已经有这样的宏,请参阅tchar.h

#include <tchar.h>

TCHAR *str = _T("Sample text");
int len = _tcslen(str);

- 根据编译器设置,将在ANSI,MBCS和UNICODE模式下工作。

有关详细信息,请参阅 this article