本帖最后由 tonytrivino 于 2009-12-30 11:52:59 编辑

解决方案 »

  1.   

    VC6.0默认是不装UNICODE支持库的,你用VS2002以上版本看下就知道了.
      

  2.   

    原来这样,#define _UNICODE是错的,得#define UNICODE.
    唉, 我是从哪里学来的#define _UNICODE, 丢脸了……
      

  3.   

    有#define _UNICODE这个宏定义吗?与#define UNICODE有区别没?
      

  4.   

    有,在VS2008中UNICODE项目属性是/D "_UNICODE" /D "UNICODE" 
      

  5.   

    有的,两者之前有区别,UNICODE这个宏是对API来说的,也就是定义了的话,你调用TextOut就是调用TextOutW,不然就是调用TextOutA。
    _UNICODE是针对C运行库而言的。
      

  6.   

    那为什么下面的输出结果是12而不是6, 我定义了_UNICODE
    #define _UNICODE
    #include <tchar.h>
    #include <stdio.h>int main() {
    TCHAR* buffer = "我是一个新手";
    printf("%d\n", strlen(buffer));
    }
      

  7.   

    http://www.vckbase.com/document/viewdoc/?id=642
      

  8.   

    不是这个问题strlen之类的函数 是计算 字符 个数 而不是 字节 个数的。。我是一个新手 6个字
      

  9.   


    lstrlen是计算字节数的#define _UNICODE  这个是c运行库中定义的
    #define UNICODE   这个是window头文件中定义的同时定义这2个这样就可以了
      

  10.   

    对于“我是一个新手”这6个字
    不管定义什么 lstrlen都是12.因为ansi中这6个汉字都是每个字2个字节的。。
    strlen 和 wcslen 都是6 
      

  11.   

    我只是有点不明白,为什么C库定义了_UNICODE, 却没有相关的函数支持, strlen不行, lstrlen不是标准库的函数,只是API, 所以我觉得这个_UNICODE似乎没有用……
      

  12.   

    谁说的?VC6.0下这个程序显示结果是6:
    #define UNICODE
    #include <windows.h>
    #include <stdio.h>int main() {
    TCHAR* buffer = "我是一个新手";
    printf("%d\n", lstrlen(buffer));
    }
      

  13.   

    建议UNICODE与_UNICODE同时定义。
      

  14.   


    错了 误导了   汉字是2个字符所以strlen 和wcslen也是12
      

  15.   

    我觉得可能是这样,如果#define UNICODE, 那么windows当中的一些函数如lstrlen会变成lstrlenW, 而#define _UNICODE是为了C库当中一些函数或变量类型而定义的,如tchar.h, 如果定义了_UNICODE, 又包含tchar.h,
    TCHAR就应该是wchar_t
      

  16.   

    我想我该睡觉去了。。
    嗯是6.。这回不会错了。。lstrlenA 是 计算字节数
    lstrlenW 是 计算 WCHAR values for Unicode versions 也就是字符数
    wcslen和 strlen是计算 字符 数所以 对于我是一个新兵 
    unicode下
    lstrlen 是6  wcslen是6
    ansi下
    lstrlen 是12  strlen是12