Working with the type size_t in the functions prinft, scanf and similar functions

Andrey Karpov
Articles: 565

To work with size_t, ptrdiff_t, intptr_t and uintptr_t types in the functions like sscanf, printf you may use size specifiers. If you are developing a Windows-application, you may use the size specifier "I".

For example:

size_t s = 1; 
printf("%Iu", s);

If you are developing a Linux-application, you may use the size specifier "z". For example:

ptrdiff_t s = 1;
printf("%zd", s);

Specifiers are well described in the Wikipedia article "printf".

If you have to maintain the code being ported that supports functions like sscanf, you may use special macros opening into the necessary size specifiers in the format of the command strings. Here is an example of a macro that helps you create ported code for various systems:

// PR_SIZET on Win64 = "I"
// PR_SIZET on Win32 = ""
// PR_SIZET on Linux64 = "z"
// ...
size_t u;
scanf("%" PR_SIZET "u", &u);
printf("%" PR_SIZET "x", u);


Use PVS-Studio to search for bugs in C, C++, C# and Java

We offer you to check your project code with PVS-Studio. Just one bug found in the project will show you the benefits of the static code analysis methodology better than a dozen of the articles.

goto PVS-Studio;

Andrey Karpov
Articles: 565

Bugs Found

Checked Projects
Collected Errors
14 526
This website uses cookies and other technology to provide you a more personalized experience. By continuing the view of our web-pages you accept the terms of using these files. If you don't want your personal data to be processed, please, leave this site. Learn More →