What is the difference between the following two chunks of code? char arr1[] = {'a', 'b', 'c'}; and char *arr2 = "abc";
They are the same.
arr2 has a trailing ''\\\\0'' character than arr1 does not.
printf("%s", (char *) arr2); will cause a memory violation.