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