使用char *参数将用户输入传递给函数

时间:2011-08-03 10:32:16

标签: c++ pointers parameters arguments function-pointers

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

我有这样的功能

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 个答案:

答案 0 :(得分: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库互操作,否则您不需要。

答案 1 :(得分:0)

将函数原型更改为

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;
}

全部取决于您未描述的实际方法体。

答案 2 :(得分:0)

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

然后调用该函数看起来像:

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

为此,您需要将功能签名更改为const char*而不是char*

答案 3 :(得分:0)

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

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

此函数返回const char *。但是,addRecord函数似乎不是常量,所以你需要修复它。

答案 4 :(得分:0)

简单的答案是,你做不到。如果你可以修改 GroceryList::addRecord,将其更改为使用std::string const&。如果你 不能修改它,那么你必须问一个问题:它为什么用 char*?有两种可能的答案:作者不明白 const,或者懒得使用它,实际上并没有修改它 指着字符串。在这种情况下,像 可以使用const_cast<char*>( itemName.c_str() );这很罗嗦,但是 这是代码作者不能完成工作时付出的代价 正确。另一个可能的答案是代码确实修改了 通过指针的东西。在这种情况下,唯一的解决方案涉及 将字符串的副本复制到char[]并传递它。