Dynamiczny format scanf'a

Dynamiczny format scanf'a
Markness
  • Rejestracja:około 15 lat
  • Ostatnio:około 2 lata
0

mam definicję

Kopiuj
#define MAX_FILENAME_LENGTH 50

następnie mam

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

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

Kopiuj
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.

edytowany 1x, ostatnio: Markness
pingwindyktator
  • Rejestracja:ponad 12 lat
  • Ostatnio:około 2 miesiące
  • Lokalizacja:Kraków
  • Postów:1055
1

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

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


do not code, write prose
edytowany 2x, ostatnio: pingwindyktator
Craith
A nie powinno być 49?
pingwindyktator
No w sumie chyba tak.
_13th_Dragon
  • Rejestracja:ponad 19 lat
  • Ostatnio:7 dni
5
Kopiuj
char fmt_buf[16];
sprintf(fmt_buf,"%%%ds",MAX_FILENAME_LENGTH-1);
fscanf(stdin,fmt_buf,filename);

Wykonuję programy na zamówienie, pisać na Priv.
Asm/C/C++/Pascal/Delphi/Java/C#/PHP/JS oraz inne języki.

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.