明確化:文字列リテラルを(以下を参照)として書き直すことができることを考えると、const
char[]
リテラルにsよりも短い最大長を課すことは
char[]
構文上の不便です。なぜC規格はこれを奨励するのですか?
C89標準には、文字列リテラルの変換制限があります。
文字列リテラルまたはワイド文字列リテラルの509文字(連結後)
char配列に制限はありません。多分
オブジェクト内の32767バイト(ホスト環境のみ)
適用されます(オブジェクトまたはホストされた環境が何を意味するのかわかりません)が、とにかくそれははるかに高い制限です。
私の理解では、文字列リテラルは文字を含むchar配列と同等です。つまり、次のように書き直すことが常に可能です。
const char* str = "foo";
これに
static const char __THE_LITERAL[] = { 'f', 'o', 'o', '\0' };
const char* str = __THE_LITERAL;
では、なぜリテラルにそのような厳しい制限があるのでしょうか。