我正在'重建'.NET框架,但是对于C ++(不使用.NET框架,所以它也适用于其他操作系统)。
这意味着我将创建一个类Console,然后如果该方法在.NET框架中被称为WriteLine,我将其全称为小写,用_分割(如:write_line)
我现在忙于read_line,但我被卡住了。
我已经尝试了几件事:
static const char * read_line()
{
char input[256];
std::cin >> input;
return std::string(input).c_str();
}
static const char * read_line()
{
char input[256];
std::cin >> input;
return input;
}
但是他们都给出了一些奇怪的角色。第一种方法给出(例如):
你的名字是:╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠ ╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠ ╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠ ╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠ ╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠α├¶☼ ☺╠╠╠╠╠╠╠╠╠╠╠☺╠╠╠╠╠╠╠╠╠╠╠≡ ╠╠╠╠╠╠╠╠和你的年龄是:╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠ ╠╠╠╠╠╠╠╠╠╠╠ ╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠ ╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠ ╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠ ╠╠╠╠╠╠╠╠╠╠α├¶☼☺╠╠╠╠╠╠╠╠╠╠╠ ╠╠╠╠╠╠╠╠∞╠╠╠╠╠╠╠╠
第二个给出:
您的姓名是:►╠╠╠╠╠╠╠╠,您的年龄是:╠╠╠╠╠╠╠╠
我做错了什么?我无法将该方法作为char数组返回。
答案 0 :(得分:4)
您将返回一个指向本地数组的指针,该函数在函数返回时被销毁。最好的解决方案是返回一个字符串对象:
std::string read_word() {
std::string input;
std::cin >> input;
return input;
}
请注意,我还更改了函数名称以匹配它的功能。如果你真的想要一条线,那么你想要
std::string read_line() {
std::string input;
std::get_line(std::cin, input);
return input;
}
如果你真的认为你想要返回一个指针,那么再想一想。你几乎肯定不会。
如果您仍然认为自己这样做,那么您可以返回一个指向静态变量的指针,该变量持续与程序一样长:
// Danger: the returned pointer is only valid until the next call.
// Danger: do not call from multiple threads.
// Danger: any line longer than 255 characters will cause dreadful calamity.
char const * read_line() {
static char input[256];
std::cin.getline(input);
return input;
}
或动态分配数组,并希望调用者记得删除它:
// Danger: the returned pointer must be deleted (with `delete[]`) after use
// Danger: any line longer than 255 characters will cause dreadful calamity.
char const * read_line() {
char * input = new char[256];
std::cin.getline(input);
return input;
}