Как объединить два 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. В этом случае они есть.

3

Решение

Поскольку эти строки являются константными, вам понадобится новый буфер для хранения результатов. Это означает нахождение длины строк с помощью ‘strlen’, выделение буфера с помощью ‘new’ и копирование строк с помощью ‘strcpy’ и ‘strcat’

Это подсказка, как научиться этому, вместо того, чтобы писать код для вас.

Кроме того, есть другие варианты, такие как использование std :: string или CString в зависимости от вашего набора инструментов.

2

Другие решения

поскольку LPCSTR это CONST CHAR* я использовал это,

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

Благодаря WhozCraig я получил ответ:

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

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

Возвращает

foobar
1

LPCSTR — это определение типа const char *. Таким образом, вы не можете использовать такой оператор.
Мое предложение ниже:

  1. Используйте переменную типа CString.
  2. Используйте функции strcpy.

Эта статья может помочь вам. http://www.codeproject.com/Articles/76252/What-are-TCHAR-WCHAR-LPSTR-LPWSTR-LPCTSTR-etc

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 как std::string на первом месте.

0
По вопросам рекламы [email protected]