以下に示すコードが何故実行できるのかわかりません.
(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] では警告が表示されるだけで、コンパイルエラーにはなりませんでした.