I have been working with strings in C. While working with ways to declare them and initialize them, I found some weird behavior I don't understand.
#include<stdio.h>
#include<string.h>
int main()
{
    char str[5] = "World";
    char str1[] = "hello";
    char str2[] = {'N','a','m','a','s','t','e'};
    char* str3 = "Hi";
    printf("%s %zu\n"
           "%s %zu\n"
           "%s %zu\n"
           "%s %zu\n",
           str, strlen(str),
           str1, strlen(str1),
           str2, strlen(str2),
           str3, strlen(str3));
    return 0;
}
Sample output:
Worldhello 10
hello 5
Namaste 7
Hi 2
In some cases, the above code makes str contain Worldhello, and the rest are as they were intialized. In some other cases, the above code makes str2 contain Namastehello. It happens with different variables I never concatenated. So, how are they are getting combined?
 
     
     
    