Как объединить два LPCSTR
У меня есть два 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. В этом случае они есть.
5 ответов
Благодаря WhozCraig я получил ответ:
LPCSTR str1 = "foo",
str2 = "bar";
std::string(str1).append(str2).c_str();
std::cout<<str1;
Возвращает
foobar
Поскольку LPCSTR
это CONST CHAR*
я использовал это,
(string(dir) + string(originalFileName)).c_str()
Поскольку эти строки являются константными, вам понадобится новый буфер для хранения результатов. Это означает нахождение длины строк с помощью 'strlen', выделение буфера с помощью 'new' и копирование строк с помощью 'strcpy' и 'strcat'
Это подсказка для того, чтобы выучить это, вместо того, чтобы писать код для вас.
Кроме того, есть другие варианты, такие как использование std::string или CString в зависимости от вашего набора инструментов.
Вы можете использовать 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
на первом месте.
LPCSTR - это определение типа const char *. Таким образом, вы не можете использовать такой оператор. Мое предложение ниже:
- Используйте переменную типа CString.
- Используйте функции strcpy.
Эта статья может помочь вам. http://www.codeproject.com/Articles/76252/What-are-TCHAR-WCHAR-LPSTR-LPWSTR-LPCTSTR-etc