当前位置:  开发笔记 > 编程语言 > 正文

LPCSTR,LPCTSTR和LPTSTR

如何解决《LPCSTR,LPCTSTR和LPTSTR》经验,为你挑选了3个好方法。

什么区别LPCSTR,LPCTSTRLPTSTR

为什么我们需要这样做才能将字符串转换为LV/ _ITEMstructure变量pszText:

LV_DISPINFO dispinfo;  
dispinfo.item.pszText = LPTSTR((LPCTSTR)string);

John Sibly.. 113

回答你问题的第一部分:

LPCSTR 是一个const字符串

LPCTSTR是一个const TCHAR字符串,(TCHAR根据是否在项目中定义了UNICODE,可以是宽字符或char)

LPTSTR是(非const)TCHAR字符串

这是一篇很棒的代码项目文章,描述了C++字符串(参见2/3,比较不同类型的图表的方式)



1> John Sibly..:

回答你问题的第一部分:

LPCSTR 是一个const字符串

LPCTSTR是一个const TCHAR字符串,(TCHAR根据是否在项目中定义了UNICODE,可以是宽字符或char)

LPTSTR是(非const)TCHAR字符串

这是一篇很棒的代码项目文章,描述了C++字符串(参见2/3,比较不同类型的图表的方式)


一切都错了.这些东西都不是字符串.他们都是指针.-1
@LightnessRacesinOrbit你在技术上是正确的 - 尽管根据我的经验,在C++中引用字符串类型时,通常的做法是省略"指向...的指针"以简洁起见
请注意,该代码项目文章是在15年前编写的,除非它得到更新,否则包含有关Unicode字符总是2个字节的误导性假设.那是完全错误的.甚至UTF16也是可变长度的...更好的说宽字符是UCS-2编码的,并且在此上下文中的"Unicode"指的是UCS-2.

2> Tim..:

又快又脏:

LP== L ong P ointer.想想指针或字符*

C= C onst,在这种情况下,我认为它们意味着字符串是const,而不是指针是const.

STR字符串

T是用于根据编译选项宽字符或字符(TCHAR).


T不适用于宽字符,它适用于不同的字符类型.W代表宽(如WCHAR).如果定义了UNICODE,则TCHAR == WCHAR,否则TCHAR == CHAR.因此,如果未定义UNICODE,则LPCTSTR == LPCSTR.
我真的很喜欢这种解释:).非常感谢
这就是为什么我写"取决于编译选项"
[** T **表示** T ** ext](https://blogs.msdn.microsoft.com/oldnewthing/20061017-03/?p=29363)

3> Ian Boyd..:

8位AnsiStrings

char:8位字符 - 基础C/C++数据类型

CHAR:别名char- Windows数据类型

LPSTR:以null结尾的字符串CHAR (L ong P ointer)

LPCSTR:常量以null结尾的字符串CHAR (L ong P ointer)

16位UnicodeStrings

wchar_t:16位字符 - 基础C/C++数据类型

WCHAR:别名wchar_t- Windows数据类型

LPWSTR:以null结尾的字符串WCHAR (L ong P ointer)

LPCWSTR:常量以null结尾的字符串WCHAR (L ong P ointer)

取决于UNICODE定义

TCHAR:WCHAR如果定义了UNICODE的别名; 除此以外CHAR

LPTSTR:以null结尾的字符串TCHAR (L ong P ointer)

LPCTSTR:常量以null结尾的字符串TCHAR (L ong P ointer)

所以

| Item              | 8-bit        | 16-bit      | Varies          |
|-------------------|--------------|-------------|-----------------|
| character         | CHAR         | WCHAR       | TCHAR           |
| string            | LPSTR        | LPWSTR      | LPTSTR          |
| string (const)    | LPCSTR       | LPCWSTR     | LPCTSTR         |

奖金阅读

TCHAR文字字符 (archive.is)


遗憾的是,这个答案永远不会成为顶级,因为它是如此新颖......这真的是SO需要解决的问题.到目前为止,这是最好的答案.
推荐阅读
手机用户2402851155
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有