char a[20];

とかの[20]ってどういう意味があるの?
これがないとエラー出る場合とない場合あるけど。