Visual c++ VC++;读取可变长度字符*

Visual c++ VC++;读取可变长度字符*,visual-c++,pointers,memory-management,Visual C++,Pointers,Memory Management,我试图从用户输入中读取一个可变长度的字符*。我希望能够指定调用函数时要读取的字符串的长度 char *get_char(char *message, unsigned int size) { bool correct = false; char *value = (char*)calloc(size+1, sizeof(char)); cout << message; while(!correct) { int control = s

我试图从用户输入中读取一个可变长度的字符*。我希望能够指定调用函数时要读取的字符串的长度

char *get_char(char *message, unsigned int size) {
    bool correct = false;
    char *value = (char*)calloc(size+1, sizeof(char));
    cout << message;

    while(!correct) {
        int control = scanf_s("%s", value);
        if (control == 1)
            correct = true;
        else
            cout << "Enter a correct value!" <<endl
                << message;

        while(cin.get() != '\n');
    }

    return value;
}
char*get\u char(char*消息,无符号整数大小){
布尔正确=错误;
char*value=(char*)calloc(size+1,sizeof(char));

不能您必须指定
值的大小
scanf\u s

int control = scanf_s("%s", value, size);
这就是诀窍

有关如何使用该功能的示例,请参见scanf_s的

与scanf和wscanf不同,scanf\u swscanf\u s要求为ccs类型的所有输入参数指定缓冲区大小[。缓冲区大小作为附加参数传递,紧跟在指向缓冲区或变量的指针之后


我在这里省略了MSDN描述的其余部分,因为在他们提供的示例中,他们使用
scanf
而不是
scanf_s
这是非常令人恼火的…

您必须将
值的大小指定为
scanf_s

int control = scanf_s("%s", value, size);
这就是诀窍

有关如何使用该功能的示例,请参见scanf_s的

与scanf和wscanf不同,scanf\u swscanf\u s要求为ccs类型的所有输入参数指定缓冲区大小[。缓冲区大小作为附加参数传递,紧跟在指向缓冲区或变量的指针之后

我在这里省略了MSDN描述的其余部分,因为在他们提供的示例中,他们使用了
scanf
而不是
scanf\u
这是非常令人恼火的