Probably I'm just too dump for googling, but I always thought char arrays get only null terminated by an literal initialization (char x[]="asdf";
) and got a bit surprised when I saw that this seems not to be the case.
int main()
{
char x[2];
printf("%d", x[2]);
return 0;
}
Output: 0
Shouldn't an array declared as size=2*char actually get the size of 2 chars? Or am I doing something wrong here? I mean it isn't uncommon to use a char array as a simple char array and not as a string, or is it?
You are accessing an uninitialized array outside its bounds. That's double undefined behavior, anything could happen, even getting 0
as output.
In answer to your real question: Only string literals get null-terminated, and that means that char x[]="asdf"
is an array of 5
elements.