Это сработает, но вам не нужен приведение на name.c_str()
(на самом деле, это неправильно: c_str()
возвращает const char *
).
Но указатель, полученный из name.c_str()
, становится недействительным, как только вы измените name
или когда name
выйдет из области видимости. Так что не пытайтесь вернуть newfilename
из функции, например.
Если вам нужно сохранить его, у вас нет другого выбора, кроме как динамически распределять память. Стандартной практикой будет использование интеллектуального указателя для автоматического управления deallocation.const char *, у вас нет другого выбора, кроме как управлять этим самостоятельно. Так что вы могли бы сделать:
char *newfilename = new char[name.length() + 1];
strcpy(newfilename, name.c_str());
return newfilename;
...
delete [] newfilename;
* Ну, стандартной практикой будет использование std::string
! Это становится сложнее, только если вам нужно взаимодействовать с унаследованным C API.