このプログラムでsegmentation faultが起こる原因はgets()関数の仕様にある。gets()関数では読み込む文字列の最大サイズを指定できないため、入力した文字列のサイズがgets()関数の引数に指定したchar型配列のサイズより大きい場合、バッファオーバーフローが起こり、他のメモリを参照しようとするためsegmentation faultが起こる。このプログラムの場合は配列dmy[]が割り当てられているメモリ領域を参照しようとしたためにsegmentation faultが起こったと考えられる。
この問題の解決策としてはfgets()関数を使用することが挙げられる。fgets()関数では第二引数で最大読み込みサイズが指定できる。入力が最大読み込みサイズ-1より大きい場合はそれ以降の文字を読み込まない。