以下に示すコードが何故実行できるのかわかりません.
(2) において、添字は-1 になっていると思いますが、何故エラーが発生しないのですか?

    #include <stdio.h>
    #include <string.h>

    int main()
    {
      char s[] = "hello";

      int len = strlen(s);
      printf("len: %d\n", len);               // (1)

      printf("%c\n", s[strlen(s) - 1 - len]); // (2)
      // printf("%c\n", s[-1]);               -> compile error
      // printf("%c\n", s[strlen(s) - 6]);    -> (2) と同じ

      return 0;
    }

実行結果 (2)printf は改行のみの印字です.

    len: 5

コメントの通り、s[-1] では警告が表示されるだけで、コンパイルエラーにはなりませんでした.