开发者

VC++ read variable length char*

I'm trying to read a variable length char* from the user input. I want to be able to specify the length of the string to read when the function is called;

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(开发者_JAVA百科) != '\n');
    }

    return value;
}

So, upon running the program and trying to enter a string, I get a memory access violation, so I figured something has gone wrong when accessing the allocated space. My first idea was it went wrong because the size of the scanned char * is not specified within scanf(), but it doesn't work with correct length strings either. Even if I give the calloc a size of 1000 and try to enter one character, the program crashes.

What did I do wrong?


You have to specify the size of value to scanf_s:

int control = scanf_s("%s", value, size);

does the trick.

See the documentation of scanf_s for an example of how to use the function:

Unlike scanf and wscanf, scanf_s and wscanf_s require the buffer size to be specified for all input parameters of type c, C, s, S, or [. The buffer size is passed as an additional parameter immediately following the pointer to the buffer or variable.

I omit the rest of the MSDN description here because in the example they're providing, they use scanf instead of scanf_s what is quite irritating...

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜