Vra

Ek wil uit te druk 'n veranderlike van tipe size_t in C maar dit wil voorkom asof size_t is gealiasseer na verskillende soorte veranderlike op verskillende platforms. Byvoorbeeld, op 'n masjien (64-bit) die volgende kode nie enige waarskuwings gooi:

size_t size = 1;
printf("the size is %ld", size);

maar op my ander masjien (32-bit) die bo-kode produseer die volgende waarskuwing boodskap:

  

waarskuwing: formaat '% ld "verwag tipe   'N lang int *', maar argument 3 het tipe   'Size_t *'

Ek vermoed dit is te danke aan die verskil in wyser grootte, sodat op my 64-bit masjien size_t is gealiasseer na 'n long int ("%ld"), terwyl op my 32-bit masjien size_t is gealiasseer na 'n ander soort.

Is daar 'n formaat specific spesifiek vir size_t?

Was dit nuttig?

Oplossing

Ja: gebruik die z lengte wysiger:

size_t size = sizeof(char);
printf("the size is %zu\n", size);  // decimal size_t ("u" for unsigned)
printf("the size is %zx\n", size);  // hex size_t

Die ander lengte wysigers wat beskikbaar is hh (vir char), h (vir short), l (vir long), ll (vir long long), j (vir intmax_t), t (vir ptrdiff_t), en L ( vir long double). Sien §7.19.6.1 (7) van die C99 standaard.

Ander wenke

Ja, daar is. Dit is %zu (soos in ANSI C99).

size_t size = 1;
printf("the size is %zu", size);

Let daarop dat size_t is unsigned, dus %ld is dubbel verkeerd: verkeerde lengte wysiger en verkeerde formaat omskakeling specific. In geval jy wonder, %zd is vir ssize_t (wat onderteken).

MSDN , sê dat Visual Studio ondersteun die "Ek" voorvoegsel vir-kode draagbare op 32 en 64 bit platforms.

size_t size = 10;
printf("size is %Iu", size);
Gelisensieer onder: CC-BY-SA met toeskrywing
Nie verbonde aan StackOverflow
scroll top