在C++中使用字符串的最佳实践
Best practices in Working with strings in C++
我目前正在制作一个小型C++工具,我对如何在C++中处理字符串感到有点震惊。这是我第一次需要处理C++,我对Java、C#等强类型的托管语言有很多经验,但我对C++字符串很着迷。
有没有在C++中使用字符串的最佳实践?
许多WIN API函数处理不同类型的"字符串"
tchar、char*、LPWSTR、LPCSTR。。。等将每种类型转换为另一种类型需要我花很多时间来实现。
请建议您在将一种类型转换为另一种类型时处理字符串的方法。也许有图书馆可以用?
简短回答?我的建议是尽可能使用std::string
或std::wstring
。
std::string strBuffer = "test";
strBuffer += " ... test";
std::string::size_type nStringSize = strBuffer.size();
const char* pszString = strBuffer.c_str(); // pszString contains
// pointer to memory held
// by STL string and can be
// passed into API calls
您可以很容易地获得一个"c风格"字符串(即指向.c_str()
的空终止字符数组char*
的指针,您可以按原样将其传递到大多数WinAPI函数中。
您提到的大多数其他类型(tchar
、LPWSTR
、LPCSTR
等)都是C样式数组的typedef(或指向C样式数组或char类型的指针),用于支持多字节字符集上的unicode。
请建议您在将一种类型转换为另一种类型时处理字符串的方法。也许有图书馆可以用?
在c++中,通常(99%的情况)应该使用std::string
(或std::wstring
)。
如果你陷入1%,当你必须处理c字符串时,你必须格外小心。然后,您需要处理指向char数组和tchar、char*、LPWSTR、LPCSTR类型的指针
正如Robinson所说,如果您已经习惯了托管语言,那么最方便的方法就是使用STDL字符串。w…是宽的(例如用于Unicode),没有w将是8位。
最"传统"的C++(或更好的C)字符串是char*
,它是指向内存中字符序列的简单指针,后面是空字节