使用实际的 C++ 字符串:
#include <string>
using std::string;
void child(const string str)
{
str += ".suffix"; // parameter str is a copy of argument
}
void parent()
{
string parents_string = "abc";
child(parents_string);
// parents_string is not modified
}
如果您必须TCHAR
在 Windows API 世界中使用,请使用std::basic_string<TCHAR>
:
typedef std::basic_string<TCHAR> str_t; // now use str_t everywhere
所以代码变成了类似
void my_class::load_bg_bmp(const str_t &dir_path)
{
str_t file_path = dir_path + _T("\\bg.bmp")l
bgtexturesurf = SDL_LoadBMP(file_path.c_str()));
// ...
}
该TCHAR
类型允许在窄字符和宽字符之间切换构建时间。使用没有意义TCHAR
,但随后使用展开的窄字符串文字,如"\\bg.tmp"
.
另外,请注意,strcat
未初始化的数组会调用未定义的行为。的第一个参数strcat
必须是字符串:指向以空字符结尾的字符数组的第一个元素的指针。未初始化的数组不是字符串。
我们可以通过使用 C++ 字符串类来避免这种低级的麻烦。