我一直在尝试将cpw库用于某些图形事物。我设置了它,我似乎在编译问题。 即,在字符串头中,它通过
提供对unicode的支持#if defined(UNICODE) | defined(_UNICODE)
#define altstrlen wstrlen
#else
#define altstrlen strlen
现在,在Windows上没有像wstrlen这样的事情,所以我尝试将其更改为wcslen,但现在它给了我和错误,因为它试图将char *转换为wchar_t *。我有点害怕如果我只是用它来使用strlen,那么其他东西就会搞砸了。
您认为stackoverflow是什么?
答案 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 。