C++常量字符*输入

C++ const char* input

本文关键字:输入 字符 常量 C++      更新时间:2023-10-16

我正在'重建'.NET框架,但为了C++(不使用.NET框架,所以它也可以在其他操作系统上运行(。

这意味着我将创建一个类控制台,然后如果该方法在 .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;
}

但他们都给出了一些奇怪的角色。第一种方法给出(例如(:

您的名字是:╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠

╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠α├¶☼☺╠╠╠╠╠╠╠╠╠╠╠ ╠╠╠╠╠╠╠╠≡ ╠╠╠╠╠╠╠╠╠╠╠,您的年龄是:╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠α├¶☼☺╠╠╠╠╠╠╠╠╠╠╠

╠╠╠╠╠╠╠╠╠∞ ╠╠╠╠╠╠╠╠

第二个给出:

您的名字是:►

╠╠╠╠╠╠╠╠,您的年龄是:╠╠╠╠╠╠╠╠

我做错了什么?我也无法让该方法作为字符数组返回。

你返回一个指向本地数组的指针,当函数返回时,该指针将被销毁。最好的解决方案是返回一个字符串对象:

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