C ++ const char *输入

时间:2013-12-11 17:38:57

标签: c++

我正在'重建'.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数组返回。

1 个答案:

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