Если я напишу:
char arr[8] = "abc";
Is есть ли какие-либо спецификации относительно того, что может быть 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"