3

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

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

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

编辑:请注意,LPCSTR 被定义为const * charLPCTSTR 被定义为const TCHAR*. 定义 UNICODE 和/或 _UNICODE 时,两者是不同的。在这种情况下,他们是。

4

4 回答 4

5

因为我用过这个LPCSTRCONST CHAR*

(string(dir) + string(originalFileName)).c_str()
于 2015-08-15T03:07:16.337 回答
2

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

这是如何学习它的提示,而不是我为您编写代码。

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

于 2015-08-15T02:47:40.783 回答
2

感谢 WhozCraig,我得到了答案:

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

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

退货

foobar
于 2015-08-15T03:11:56.970 回答
0

您可以使用std::string该类来完成繁重的工作,因为它包含重载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为 a std::string

于 2015-08-15T03:46:32.477 回答