以下のコードがまだ機能する理由を誰が教えてくれますか? str[4] が境界外であることは明らかです。
#include<stdio.h>
int main(){
char str[3];
scanf("%s", str);
printf("%c\n", str[4]);
printf("%s\n", str);
return 0;
}
実行時に と入力するabcdefg
と、5 番目の文字と文字列全体がエコーされますが、何も問題はありません。
c/c++ は境界チェックを行わないと宣言されていますが、上記の場合、printf を使用してユーザーが入力した c-string を出力するにはどうすればよいですか? またはより一般的には、ユーザーからの c-string を適切に使用する方法は?