C gets dangerouse


testがあるclient.cファイルは、Cライブラリが持つ関数getsを使用していますが、コンパイルするとこのwarningが表示されます.
test_client.c:(.text+0x128):warning:the 'gets' function is dangerouse and should not be used.
 
この警告が出て、ネットで探してみると、答えがたくさんありますが、私はやはりうるさいでしょう.
#include <stdio.h>
main()
{
     char buff[2];
     gets(buff);
     printf("%s
", buff) }

getsを実行すると、入力を待っています.では、今見てみましょう.私は異なる長さを入力して、どのような結果が得られますか.(これはwindowsで実行されている場合で、原理は似ています.添付ファイルの画像を見てください)
aを入力すると、aを出力します.(図01)
abcを入力するとabcを出力します.この時点でbuffは境界を越えているので、この時点で入力した値は、buffに属さない空間を上書きします.(図02)
abcdefを入力するとabcdefが出力されます.このとき、「***」コマンドが参照するメモリ「***」というボックスも表示されます.このメモリはwrittenできません.(図03)
 
以上の入力事例から,getsは入力長を制御できないことが分かった.その代わりの関数はfgetsで、入力の長さを制御することができます.
さっきの例のように
#include <stdio.h>
main()
{
   char buff[2];
   fgets(buff,2, stdin);//stdin        
   printf("%s
", buff); }

この時、私はabcを入力して、出力の結果もaです;(図04)
fgetsの具体的な使用については、このサイトを参照してください.
http://www.cplusplus.com/reference/clibrary/cstdio/fgets/
fgetsはstdio.h奥
注:getsは最後のリターン()を読み込まず、fgetsは読み込まれます.