Возможно ли преобразовать аргумент из 'const char []' в 'char *' в C ++? - PullRequest
0 голосов
/ 21 сентября 2018

Определение метода:

void setArgument(char *);

И я вызываю этот метод с этим кодом:

setArgument("argument");

Но мой компилятор VisualStudio выдает мне следующую ошибку:

не может преобразовать аргумент 1 из 'const char [10]' в 'char *'

Можно ли отправлять подобные аргументы или я должен изменить тип аргументов в методе?Кроме того, VS показывает мне следующую заметку в выводе: note: Преобразование из строкового литерала теряет квалификатор const (см. / Zc: strictStrings)

Ответы [ 2 ]

0 голосов
/ 21 сентября 2018

Проблема состоит в том, что строковые литералы представляют собой массивы константа символов.

Хотя массив может легко переходить в указатель на свой первый элемент, типэтот указатель const char *.Который должен быть типом аргумента для ваших функций.

И если вам нужно изменить передаваемую строку, то вы должны создать свой собственный непостоянный массив:

char argument[] = "argument";
setArgument(argument);

Конечно, поскольку вы программируете на C ++, вам следует прекратить использование char указателей и массивов и вместо этого использовать std::string.

0 голосов
/ 21 сентября 2018

Возможно, просто если вам действительно нужен изменяемый аргумент (char*, а не char const*), вам нужно выделить новое хранилище в изменяемой памяти и клонировать туда содержимое постоянной памяти, еслиэто вписывается в ваше определение «convert».

auto const len = strlen(input);
auto const buf = std::unique_ptr<char[]>(new char[len + 1]);
memcpy(buf, input, len + 1);

Если вам действительно нужно char const* и если вы C++17 или новее, вы можете изменить подпись на setArgument(std::string_view arg), сделав ее неправильной-доказательство.

...