如何连接两个 LPCSTR

How to Concatenate Two LPCSTRs

我有两个 LPCSTR,需要像这样连接:

if (!rename(directory + originalFileName, directory + fileName)){
    std::cout<<originalFileName<<std::endl<<fileName<<std::endl<<std::endl;
}

唯一的问题是我不能在这里使用 + 运算符。我怎样才能像这样安全地连接两个 LPCSTR?

编辑:请注意,LPCSTR 定义为 const * char,而 LPCTSTR 定义为 const TCHAR*。当定义了 UNICODE and/or _UNICODE 时,两者是不同的。在这种情况下,他们是。

由于这些字符串是常量,您将需要一个新的缓冲区来保存结果。这意味着使用 'strlen' 查找字符串的长度,使用 'new' 分配缓冲区,并使用 'strcpy' 和 'strcat'

复制字符串

这是学习方法的提示,而不是我为您编写代码。

此外,还有其他选项,例如使用 std::string 或 CString,具体取决于您的工具集。

因为 LPCSTRCONST CHAR* 我用过这个,

(string(dir) + string(originalFileName)).c_str()

感谢 WhozCraig,我得到了答案:

LPCSTR str1 = "foo",
       str2 = "bar";

std::string(str1).append(str2).c_str();
std::cout<<str1;

Returns

foobar

您可以使用 std::string class 来完成繁重的工作,因为它包含重载的 operator+。但是,在尝试读取其内容之前,您必须确保 std::string 对象未被销毁。

一种方式(在 C++03 中)是:

std::string dest = std::string(directory) + originalFileName;
std::string src = std::string(directory) + fileName;

if (!rename(dest.c_str(), src.c_str())
    // whatever...

首先考虑将 directory 存储为 std::string