Передача пользовательского ввода в функцию с параметрами 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[]
и передать его.