#include <stdio.h>
#include <string.h>
int main(int argc, char *argv[]) {
char string[] = "october"; // 7 letters
strcpy(string, "september"); // 9 letters
printf("the size of %s is %d and the length is %d\n\n", string,
sizeof(string), strlen(string));
return 0;
}
Output:
$ ./a.out
the size of september is 8 and the length is 9
Is there something wrong with my syntax or what?
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.