C ++:使用和返回函数中的字符数组,返回类型还是引用?
我正在尝试在函数外部创建一个以空字符结尾的字符串,然后运行一个将为其分配一些数据的函数。例如,char abc [80]
中创建了main
。然后运行input()
,这会将用户输入返回到abc
。我认为这两个显而易见的方法是:
1。 使输入函数将输入返回到main中的变量,如:
char input ()
{
char input [80];
getline(cin, choice);
return input;
}
int main ()
{
char choice [80];
choice = input ();
...
}
2。 将一个字符数组传递给我的引用输入函数,然后从那里将数据放入其中:
...
void input (&variable)
{
getline(*variable, cin);
return;
}
int main ()
{
char choice [80];
char* pointer;
input (pointer);
...
}
但是,我无法使用这两种方法。那么,我做错了什么,我该如何解决呢?
答案 0 :(得分:7)
只需使用标准字符串。使用恒定宽度阵列的疯狂至少导致我公司在开发时间上花费了数十万美元。你问题的正确答案可能令你感到沮丧,但它确实是,“不要那样做!”
答案 1 :(得分:2)
在第一种方法中,您尝试返回char而不是指向char的指针。 C ++ STL提供了一个字符串类,它以更可靠的方式封装字符数组。授予原始字符数组更快,但正确性比性能更重要。
std::string input()
{
return std::string("return value");
}
int main()
{
std::string myString = input();
}
答案 2 :(得分:0)
听诺亚,但是你所做错的是你需要传入一个指向指针的指针(char** variable
)。
答案 3 :(得分:0)
在示例1中,变量输入(我认为您的意思是选择)在堆栈上并且在函数结束时消失,您无法安全地在调用函数中使用该内存位置。
在示例2中,您传递单个字符指针,以获得您想要工作的内容,您需要传入指向选择数组的指针。
char ** pointer = choice;
并且你不想在输入函数中使用derefernce变量,getline期望一个双字符指针。
实际上gnu getline期待3个参数,但也许你没有使用那个参数。