将用户输入传递给带有char*参数的函数

Passing user input to function with char* parameters

本文关键字:char 参数 函数 输入 用户      更新时间:2023-10-16

我是新手,所以我知道这可能很简单。

我有一个这样的函数

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个小时,想找到什么,但到目前为止还没有找到。

好吧,不要用char*

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

您可以使用c_str()成员函数从string获得const char*(而不是char*),例如itemName.c_str(),但除非您正在与C库进行互操作,否则您不需要。

将函数原型改为

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

我还建议在你的代码中const正确性,如果你不打算改变参数,通过ref with const传递它们(为了性能)

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

一切取决于你没有描述的实际方法体

使用std::string::c_str();这就是它的作用:

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

这个函数返回const char *。但是,addRecord函数似乎不是const正确的,所以您需要修复这个问题。

您可以使用字符串,然后在传递时仅调用c_str()对字符串。对于评级,您可以使用char

然后调用函数如下:

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

要使其工作,您需要将函数签名更改为const char*而不是char*

简单的答案是你不能。如果你可以修改GroceryList::addRecord,改为使用std::string const&。如果你不能修改它,那么你就要问这个问题:它为什么要用char*吗?有两种可能的答案:作者没有理解const,或者是懒得使用它,实际上并没有修改指向字符串。在这种情况下,类似于可以使用const_cast<char*>( itemName.c_str() );这是冗长的,但是当代码的作者没有做好他的工作时,这就是你要付出的代价正确。另一个可能的答案是,代码确实会修改通过指针。在这种情况下,唯一的解决方案涉及将该字符串复制到char[]中,并将其传递。