Передача пользовательского ввода в функцию с параметрами char*

Я новичок в этом, поэтому я знаю, что это, вероятно, что-то простое.

У меня есть такая функция

void GroceryList::addRecord(char* itemName, char* itemType, char rating){
//do some code;
}

Моя проблема в том, что у меня проблемы с созданием правильных аргументов для передачи в функцию.

I've tried something like
void main() {
    string itemName;
    cin >> itemName;
    string itemType;
    cin >> itemType;
    string rating;
    cin >> rating;

gradeBook.addRecord(itemName, itemType, rating);
}

Я не ожидал, что это сработает, поскольку функция ожидает char*, но я не могу понять, как получить пользовательский ввод в переменную, которую я могу передать функции. Я искал буквально 13 часов, пытаясь найти то, что я могу найти, но пока не повезло.

5 ответов

Ну не пользуйся char*,

void GroceryList::addRecord(const std::string& itemName, const std::string& itemType, const std::string& rating) { /* ... */ }

Ты можешь получить const char* (не char*) от string с c_str() функция-член, например itemName.c_str(), но если вы не взаимодействуете с библиотеками C, вам это не нужно.

Измените прототип функции на

void GroceryList::addRecord(string itemName, string itemType, string rating){
//do some code;
}

Я также рекомендую правильность const в вашем коде, если вы не собираетесь изменять аргументы, передайте их по ref с помощью const (для производительности)

void GroceryList::addRecord(const string& itemName, const string& itemType, const string& rating){
//do some code;
}

Все зависит от фактического тела метода, которое вы не описали.

Вы можете использовать строку, а затем при прохождении просто позвоните c_str() на веревочке. Для оценки вы можете просто использовать char,

Тогда вызов функции выглядит так:

gl.addRecord(itemName.c_str(), itemType.c_str(), rating);

Чтобы это работало, вам нужно изменить сигнатуру функции на const char* вместо char*,

Используйте std::string::c_str(); вот для чего это:

gradeBook.addRecord(itemName.c_str(), itemType.c_str(), rating.c_str());

Эта функция возвращает const char *, Тем не менее addRecord функция не выглядит корректно, поэтому вам нужно это исправить.

Простой ответ заключается в том, что вы не можете. Если вы можете изменитьGroceryList::addRecordизмените его на использование std::string const&, Если вы не можете изменить его, то вам нужно задать вопрос: почему он используетchar*? Есть два возможных ответа: автор не понялconstили слишком ленив, чтобы использовать его, и на самом деле не изменяет указанные строки. В этом случае что-то вродеconst_cast<char*>( itemName.c_str() ) может быть использован; это многословно, но это цена, которую вы платите, когда автор кода не выполняет свою работу правильно. Другой возможный ответ заключается в том, что код изменяет что-то через указатель. В этом случае единственное решение состоит в том, чтобы сделать копию строки в char[]и передать его.

Другие вопросы по тегам