Как указать считываемый размер в scanf?

scanf-ом можно считать определенное кол-во символов, к примеру, с помощью "%10s".

Как считать количество символов из переменной? Не используя при этом просто "%s" или fgets.

Допустим,

int count;
fscanf(stdin, "%d", count);
char* name = new char [count];
fscanf (stdin, /*как указать считываемое кол-во символов count? */, name);

Ответы (1 шт):

Автор решения: eanmos

Для scanf − никак.

В функции printf есть похожее поведение − можно дополнительным аргументом указать минимальную ширину поля или точность преобразования. Пример с минимальной шириной поля:

char str[] = "abc";
printf("%*s\n", 10, str); // обратите внимание на звездочку (*)
printf("%10s\n", str);

Можете, как @Alex F посоветовал в комментариях, генерировать строку формата с помощью, например, snprintf:

const size_t count = 3;
char name[count + 1];

const size_t fmt_length = snprintf(NULL, 0, "%%%zus", count);
char fmt[fmt_length + 1];
snprintf(fmt, sizeof fmt, "%%%zus", count);

scanf(fmt, name);
→ Ссылка