У меня есть функция в сторонней библиотеке, написанная на C: char* fix_filename_slashes(char* path)
. Эта функция ожидает, что ей будет передана изменяемая C-строка, чтобы она могла изменить все слэши в пути для правильного использования в зависимости от операционной системы. Все строки, которые я использую в своем Фасаде, объявлены как std::string
s. Я попытался просто использовать foo.c_str()
, поскольку любая другая функция, которая ожидает, что строка C не меняет ее, и ожидает const char *
, но эта функция вызывает ошибку: Error: Argument of type "const char *" is incompatible with parameter of type "char *"
Является ли результат, который я придумал:
char* tempf = const_cast<char*>(filename.c_str());
filename = std::string(fix_filename_slashes(tempf));
tempf = NULL;
считается "правильным" или есть другие (более правильные?) Способы выполнения задачи?
EDIT
Whups. Видимо функция возвращает КОПИЮ строки. Тем не менее, есть некоторые хорошие ответы, которые уже даны.