『【C】初めてのC言語(17. 文字列リテラル)』の表題で

> 文字列リテラルの機能
> ・ダブルクォーテーションで囲まれた文字列(文字列リテラル)は、
>  自動的に末尾に「\0」を付ける処理が入っています。
>  ・ダブルクォーテーションを使わず、char型の配列として文字列を
>   作る場合は終端文字として「\0」を入れます。

と書いてるのは文字列リテラルとcharの配列とcharの配列に文字列リテラル
で初期化するのの区別がついていないんだろう。

> 文字列宣言でよくある誤り
> 以下のように、「n文字を格納するために用意する配列の要素数がn(=nバイト)」
> だと、最後に「\0」を入れる要素が足りなくなってしまいます。
> #include <stdio.h>
>
> // よくある誤り
> int main(void){
>   const char str[5] = "Hello"; // 配列の要素数が「文字列の長さと等しい」と、終端文字を入れられない!
>   printf("%s\n", str);
>   return 0;
> }

char の配列の最後に'\0'を入れなきゃいけないルールもないのでこれも誤り。