Serviceを読んで理解し、同意したものとみなします。s[-1]);は警告は出るかもしれませんが-Werror等を指定しない限りコンパイルエラーにはならないはずです。14:55基本C言語では配列の添え字の範囲チェックは(コンパイル時、ランタイム時の両方で)行いません。(オプションでそのような(あるいはスタックフレームの)ランタイムでのチェックをするようになるコンパイラはあるかもしれません。ランタイム時にs[-1]のようなアクセスが行われた結果は動作未定義です。いうところの「未定義動作」を引き起こしています。言語仕様書はその動作に対して何も規定しないです。その他の動作ということで何故エラーが発生しないのですか?そもそも「エラーとして検出される」ことは期待してはいけないのです。