C コードを C++ に移行しています。
次のコードが C で適切に定義されていることに気付きました。
int main(){
//length is valid. '\0' is ignored
char str[3]="abc";
}
配列の初期化で次のように述べられています。
「配列のサイズがわかっている場合、文字列リテラルのサイズよりも 1 小さい可能性があります。この場合、終端の null 文字は無視されます。」
ただし、C++ で同じコードをビルドすると、次の C++ エラーが発生します。
error: initializer-string for array of chars is too long
[-fpermissive] char str[3]="abc";
誰かがこれについて説明できることを願っています。
質問:
コード例はすべての C 言語標準で有効ですか?
すべての C++ 言語標準で無効ですか?
ある言語では有効で、別の言語では有効でない理由はありますか?