C++字符串完好指引之二:字符串封装类[VC/C++编程]
本文“C++字符串完好指引之二:字符串封装类[VC/C++编程]”是由七道奇为您精心收集,来源于网络转载,文章版权归文章作者所有,本站不对其观点以及内容做任何评价,请读者自行判断,以下是其具体内容:
引言
因为C语言气势的字符串简单出错且不易管理,黑客们乃至操纵大概存在的缓冲区溢出bug把C语言气势的字符串作为攻击目标,所以呈现了很多字符串封装类.不幸的是,在某些场所下我们不知道该利用哪个字符串类,也不知道怎样把一个C气势的字符串转换成一个字符串封装类.
这篇文章将介绍全部在Win32 API, MFC, STL, WTL 和 Visual C++ 运行库中呈现的字符串范例.我将描写每一个类的用法,奉告大家怎样成立每一个类的对象以及怎样把一个类转换成其他类.受控字符串和Visual C++ 7中的类两部份是Nish完成的.
为了更好的从这篇文章中受益,你必必要懂得差别的字符范例和编码,这些内容我在第一部份中介绍过.
Rule #1 of string classes
利用cast来实现范例转换是不好的做法,除非有文档明确指出这种转换可以利用.
促使我写这两篇文章的缘由是字符串范例转换中常常碰到的一些问题.当我们利用cast把字符串从范例X转换到范例Z的时刻,我们不知道为什么代码不能正常工作.各种各样的字符串范例,特别是BSTR,几近没有在任何一个地方的文档中被明确的指出可以用cast来实现范例转换.所以我想一些人大概会利用cast来实现范例转换并但愿这种转换可以正常工作.
除非源字符串是一个被明确指明支持转换操作符的字符串包装类,不然cast不对字符串做任何转换.对常量字符串利用cast不会起到任何作用,所以下面的代码:
void SomeFunc ( LPCWSTR widestr );
main()
{
SomeFunc ( (LPCWSTR) "C:\foo.txt" ); // WRONG!
}
必定会失利.它可以被编译,因为cast操作会撤消编译器的范例查抄.但是,编译可以通过并不能阐明代码是精确的.
在下面的例子中,我将会指明cast在什么时刻利用是合理的.
C-style strings and typedefs
正如我在第一部份中提到的,windows APIs 是用TCHARs来定义的,在编译时,它可以按照你能否定义_MBCS大概_UNICODE被编译成MBCS大概Unicode字符.你可以参看第一部份中对TCHAR的完好描写,这里为了便利,我列出了字符的typedefs
Type | Meaning |
WCHAR | Unicode character (wchar_t) |
TCHAR | MBCS or Unicode character, depending on preprocessor settings |
LPSTR | string of char (char*) |
LPCSTR | constant string of char (const char*) |
LPWSTR | string of WCHAR (WCHAR*) |
LPCWSTR | constant string of WCHAR (const WCHAR*) |
LPTSTR | string of TCHAR (TCHAR*) |
LPCTSTR | constant string of TCHAR (const TCHAR*) |
以上是“C++字符串完好指引之二:字符串封装类[VC/C++编程]”的内容,如果你对以上该文章内容感兴趣,你可以看看七道奇为您推荐以下文章:
本文地址: | 与您的QQ/BBS好友分享! |