0

我一直在尝试将 cpw 库用于一些图形的东西。我设置好了,我似乎在编译时遇到了问题。即,在字符串标头中,它通过以下方式提供对 unicode 的支持

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

现在,Windows afaik 上没有 wstrlen 这样的东西,所以我尝试将其更改为 wcslen,但现在它给了我和错误,因为它试图将 char * 转换为 wchar_t *。我有点害怕如果我只是让它使用 strlen 任何一种方式,其他东西会搞砸。

你觉得stackoverflow怎么样?

4

4 回答 4

1

也许您可以wcslenwstrlen以前一样定义包括 lib 标头:

#define wstrlen wcslen
#include "cpw.h"

您得到的错误可能是由于您将 a char*that 传递给最终调用其中一个函数的东西。

于 2010-07-28T03:12:51.400 回答
1

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

于 2010-07-29T23:40:18.143 回答
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

于 2010-07-28T00:27:58.977 回答
0

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

#include <tchar.h>

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

-- 将在 ANSI、MBCS 和 UNICODE 模式下工作,具体取决于编译器设置。

有关更多详细信息,请参阅这篇文章

于 2015-03-08T16:29:19.790 回答