Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Why does using the wrong format specifier in C crash my program on Windows 7?

My program is as follows;

#include <stdio.h>
#include <string.h>

int main()
{
        char string[] = "Gentlemen start your engines!";
        printf("That string is %s characters long.\r\n", strlen(string));
        return 0;
}

I'm compiling under gcc, and although it doesn't give me any errors the program crashes every time I run it. The code seems to be fine from examples I've seen. It'd be great to know if I'm doing anything wrong.

Thanks.

like image 585
austinprete Avatar asked Nov 20 '10 08:11

austinprete


1 Answers

Using incorrect format specifier in printf() invokes Undefined Behaviour. Correct format specifier should be %zu (not %d) because the return type of strlen() is size_t

Note: Length modifier z in %zu represents an integer of length same as size_t

like image 133
Prasoon Saurav Avatar answered Nov 06 '22 12:11

Prasoon Saurav