Инициализация массива символов меньшим строковым литералом

Если я напишу:

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"
12
задан sidyll 23 November 2011 в 15:09
поделиться