代码之家  ›  专栏  ›  技术社区  ›  Xzhsh

Unicode、char指针和wcslen

  •  0
  • Xzhsh  · 技术社区  · 16 年前

    我一直在尝试使用CPW库来处理一些图形问题。我把它设置好了,编译时似乎遇到了问题。 也就是说,在字符串头中,它通过

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

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

    你觉得StackOverflow怎么样?

    4 回复  |  直到 11 年前
        1
  •  1
  •   Igor Zevaka    16 年前

    也许你可以定义 wcslen 作为 wstrlen 在包含lib头之前:

    #define wstrlen wcslen
    #include "cpw.h"
    

    你得到的错误可能是由于你通过了 char* 最终调用其中一个函数。

        2
  •  1
  •   Remy Lebeau    16 年前

    如果您的数据是基于char*的,那么就不需要调用strlen()的Unicode版本,只需单独使用常规strlen(),因为它将char*作为输入。除非char*数据实际上是utf-8编码的,并且您试图确定未编码的unicode长度,在这种情况下,您需要先对utf-8进行解码,然后再调用wcslen()。

        3
  •  0
  •   Dean Harding    16 年前

    如果在Windows上使用Unicode,则需要将所有字符类型更改为 wchar_t . 这意味着,而不是:

    char *str = "Hello World";
    int len = strlen(str);
    

    你需要:

    wchar_t *str = L"Hello World";
    int len = wcslen(str);
    

    请注意,字符类型已更改为 瓦查特 字符串的前缀是 L .

        4
  •  0
  •   rustyx    11 年前

    Visual Studio已具有此类宏,请参见 tchar.h .

    #include <tchar.h>
    
    TCHAR *str = _T("Sample text");
    int len = _tcslen(str);
    

    --将在ansi、mbcs和unicode模式下工作,具体取决于编译器设置。

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