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