Указание максимальной длины строки для динамического сканирования в C (например, «% * s» в printf)

Я могу указать максимальное количество символов дляscanf читать наbuffer используя эту технику:

char buffer[64];

/* Read one line of text to buffer. */
scanf("%63[^\n]", buffer);

Но что, если мы не знаем длину буфера, когда пишем код? Что если это параметр функции?

void function(FILE *file, size_t n, char buffer[n])
{
    /* ... */
    fscanf(file, "%[^\n]", buffer); /* WHAT NOW? */
}

Этот кодуязвимы для переполнения буфера какfscanf не знает, насколько большой буфер.

Я помню, как видел это раньше и начал думать, что это было решение проблемы:

fscanf(file, "%*[^\n]", n, buffer);

Моей первой мыслью было то, что* в"%*[*^\n]" означало, что максимальному размеру строки передается аргумент (в данном случаеn). Это значение* вprintf.

Когда я проверил документацию дляscanf Я узнал, что это означает, чтоscanf следует отказаться от результата[^\n].

Это несколько разочаровало меня, так как я думаю, что было бы очень полезно иметь возможность динамически передавать размер буфера дляscanf.

Есть ли способ передать размер буфера вscanf динамически?

Ответы на вопрос(0)

Ваш ответ на вопрос