Если я пишу:
char arr[8] = "abc";
Есть ли какая-либо спецификация, над которой может быть arr[4]
? Я провел несколько тестов с
Clang, и кажется, что остальные символы в массиве имеют значение null.
Кроме того, char arr[8] = "";
обнуляет каждый байт. Не уверен, что это компилятор
удобство, стандартное поведение, чистое совпадение или я ошибался.
void a()
{
char arr[8] = "abc"; /* breakpoint here, line 3 */
strcpy(arr, "1234567");
}
int main()
{
a();
a();
return 0;
}
Расшифровка отладки:
Breakpoint 1, a () at str.c:3 3 char arr[8] = "abc"; (gdb) s Current language: auto; currently minimal 4 strcpy(arr, "1234567"); (gdb) p arr $1 = "abc\000\000\000\000" (gdb) c Continuing. Breakpoint 1, a () at str.c:3 3 char arr[8] = "abc"; (gdb) p arr $2 = "1234567" (gdb) s 4 strcpy(arr, "1234567"); (gdb) p arr $3 = "abc\000\000\000\000"