Хранение строки в массиве символов без нулевого символа

Я читаю C ++ Primer Plus Стивена Прата. Он приводит этот пример:

char dog[8] = { 'b', 'e', 'a', 'u', 'x', ' ', 'I', 'I'}; // not a string!
char cat[8] = {'f', 'a', 't', 'e', 's', 's', 'a', '\0'}; // a string!

с комментарием, который:

Оба этих массива являются массивами char, но только вторая является строкой. Нулевой символ играет фундаментальную роль в строках в стиле C. Например, в C ++ есть много функций, которые обрабатывают строки, в том числе те, которые используются cout. Все они работают, обрабатывая строку символьно-символьно, пока не достигнут нулевого символа. Если вы попросите, чтобы cout отобразил красивую строку, такую как cat, в предыдущем примере, он отобразит первые семь символов, обнаружит нулевой символ и остановится. Но если вы достаточно неблагодарны, чтобы сказать cout для отображения массива dog из предыдущего примера, который не является строкой, cout печатает восемь букв в массиве, а затем продолжает проходить по памяти побайтно, интерпретируя каждый байт как символ для печати, пока он не достигнет нулевого символа. Поскольку нулевые символы, которые в действительности равны нулю байтами, имеют тенденцию быть общими в памяти, повреждение обычно быстро удерживается; тем не менее, вы не должны рассматривать массивы нестроковых символов как строки.

Теперь, если объявить мои переменные глобальными, вот так:

#include 
using namespace std;

char a[8] = {'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h'};
char b[8] = {'1', '2', '3', '4', '5', '6', '7', '8'};

int main(void)
{
    cout < a < endl;
    cout < b < endl;

    return 0;
}

Ответы на вопрос(4)

Ваш ответ на вопрос