2010-07-28 45 views
0

我一直在尝试使用cpw库来处理一些图形事物。我建立了,并且我似乎在编译时遇到问题。 也就是说,在一个串标头再通过Unicode,char指针和wcslen

#if defined(UNICODE) | defined(_UNICODE) 
#define altstrlen wstrlen 
#else 
#define altstrlen strlen 

现在提供对Unicode的支持,还有为wstrlen在Windows AFAIK没有这样的事情,所以我试图改变,要wcslen,但现在它给了我和错误,因为它试图将char *转换为wchar_t *。我有点害怕,如果我只是用它来使用strlen,别的东西就会搞砸了。

您认为stackoverflow是什么?

+0

您是否检查传递给altstrlen的字符串是否是UNICODE字符串?它应该使用L“str”限定符或应该使用_T(“str”)宏。 – naivnomore 2010-07-28 01:08:44

回答

1

也许你可以包括的lib头之前定义wcslenwstrlen

#define wstrlen wcslen 
#include "cpw.h" 

你所得到的错误很可能是由于您传递char*即到的东西,最终调用这些功能之一。

+0

我检查了库的源代码,结果发现它们没有遵循自己的格式。当宏定义帮助时,将它们的char *与wchar_t *交换。谢谢 – Xzhsh 2010-08-03 21:56:34

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

+0

事情是,这不是我的代码,我使用OpenGL的cpw窗口库。 http://www.mathies.com/cpw/about.html。我只是想知道我应该怎么做(即通过库并将所有字符更改为wchar_t,使用strlen并希望获得最佳效果等)。 – Xzhsh 2010-07-28 00:30:43

1

如果你的数据是以char *开始的,那么就不需要调用strlen()的Unicode版本,只需要使用常规的strlen(),因为它需要char *作为输入。除非你的char *数据实际上是UTF-8编码,并且你试图确定未编码的Unicode长度,在这种情况下,你需要在调用wcslen()之前先解码UTF-8。

0

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

#include <tchar.h> 

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

- 将在ANSI工作,MBCS和UNICODE方式取决于编译器设置。

欲了解更多详情,请参阅this article