Как преобразовать в char* из const string& и из const char*
У меня есть класс String.
Класс String выглядит так:
class String {
private:
char* string;
size_t size;
public:
String() {}
String(const std::string&);
String(const char*);
И в этом классе есть 2 конструктора.
- String (const string&);
- String (const char*);
Они должны записать полученные данные в переменную string в поле private.
Возможно ли вообще такое преобразование? Или стоит поменять реализацию класса?
(Такой класс дан по заданию)
Ответы (1 шт):
Как отметил @KoVadim, можно воспользоваться strdup(), но стоит обратить внимание на то, что strdup() не соответствует ANSI C из-за чего некоторые компиляторы отказываются его использовать, склоняясь к использованию _strdup().
Для конвертации типов можно воспользоваться const_cast или старым сишным приведением.
char* foo(const char* ch) {
return const_cast<char*>(ch);
}
или
char* foo(const char* ch) {
return (char*)ch;
}
Таким образом можно привести и std::string к char* с помощью метода c_str().
int main(int argc, char* argv)
{
char* ch1;
char* ch;
std::string str = "std::string text";
const char* c_ch = "const char text";
ch1 = foo(str.c_str());
ch = foo(c_ch);
std::cout << ch1 << "\n";
std::cout << ch;
return 0;
}
Вывод:
std::string text
const char text