#include
#include
int main(int argc, char *argv[]) {
char string[] = \"october\"; // 7 le
You must eliminate buffer overflow problem in this example. One way to do this - is to use strncpy
:
memset(string, 0, sizeof(string));
strncpy(string, "september", sizeof(string)-1);
sizeof
and strlen()
do different things. In this case, your declaration
char string[] = "october";
is the same as
char string[8] = "october";
so the compiler can tell that the size of string
is 8. It does this at compilation time.
However, strlen()
counts the number of characters in the string at run time. So, after you call strcpy()
, string
now contains "september". strlen()
counts the characters and finds 9 of them. Note that you have not allocated enough space for string
to hold "september". This is undefined behaviour.
Your destination array is 8 bytes (length of "october" plus \0) and you want to put in 9 chars in that array.
man strcpy
says:
If the destination string of a strcpy() is not large enough, then anything might happen.
Please tell me what you really want to do, because this smells bad long way
The Output is correct because
first statement string size was allocated by compiler that is 7+1 (October is 7 bytes & 1 byte for null terminator at compile time)
Second statement: you are copying September (9 bytes to 8 bytes string);
there for you got size of September as 8 bytes (still strlen()
will not work for September it does not have null character)