C言語簡単にクラッシュしすぎワロタw

#include <stdio.h>

main()
{
    char input[4];
    gets(input);
    printf("%s\n", input);
}
このようなコードを書いて、
"01234567890123456789"
という文字列を入力するだけで、プロセスが簡単にクラッシュします。



C言語コワ~(((;゚Д゚)))ガクブル

なぜ5文字とか10文字ではクラッシュせず、20文字でクラッシュするのかは謎です。
(正確には、"012345678901234"だとOKで"0123456789012345"だとクラッシュしました)

どなたがご存知でしたら教えてください。

追記:Ubuntuでやってみたら・・・

dqneo:/home/dqneo/github/cwork% gcc ~/tmp/crush.c
/tmp/ccERj4xZ.o: In function `main':
crush.c:(.text+0x18): warning: the `gets' function is dangerous and should not be used.

dqneo:/home/dqneo/github/cwork% ./a.out
012
012
dqneo:/home/dqneo/github/cwork% ./a.out
0123
0123
zsh: segmentation fault  ./a.out
"012"だとOKで、"0123"だとsegmentation faultでした。
入力時の最後の改行コード1文字分があることを考えると、これは納得の行く結果ですね。

それ以前に、コンパイル時に"gets使うな"と警告が出ていました。
どうもありがとうございました。(誰に
カテゴリ:

人気記事