У меня есть два 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 и / или _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;
Возвращает
foobar
LPCSTR — это определение типа const char *. Таким образом, вы не можете использовать такой оператор.
Мое предложение ниже:
Эта статья может помочь вам. http://www.codeproject.com/Articles/76252/What-are-TCHAR-WCHAR-LPSTR-LPWSTR-LPCTSTR-etc
Вы можете использовать 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
как std::string
на первом месте.