Dynamiczny format scanf'a

0

mam definicję

#define MAX_FILENAME_LENGTH 50

następnie mam

char *filename = malloc(sizeof(char) * MAX_FILENAME_LENGTH);

i chcę pobrać wartość tej zmiennej od użytkownika robiąc to tak:

fscanf(stdin, "%s", filename);

Jednak pasowałoby mi użyć specyfikatora np. %50s gdzie liczba 50 jest zdefiniowana jako MAX_FILENAME_LENGTH żeby nie wczytać więcej niż mogę, jak dynamicznie przygotować format scanfa? Próbowałem użyć snprintfa i przygotować format wcześniej ale z marnym skutkiem.

1

#define MAX_FILENAME_LENGTH_FORMAT "%50s" fscanf(stdin, MAX_FILENAME_LENGTH_FORMAT, filename);

To nie jest idealne rozwiązanie, ale może wystarczy.

5
char fmt_buf[16];
sprintf(fmt_buf,"%%%ds",MAX_FILENAME_LENGTH-1);
fscanf(stdin,fmt_buf,filename);

1 użytkowników online, w tym zalogowanych: 0, gości: 1