如何连接两个 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,具体取决于您的工具集。
因为 LPCSTR
是 CONST 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
。
我有两个 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,具体取决于您的工具集。
因为 LPCSTR
是 CONST 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
。