ローカル変数に char usage[] = "..."; と書くと、コピーが入るので遅くなるので、こういう場合は char *usage=".."とします。 一般にargcは1以上です。従ってこのプログラムは常に 9行目を実行する。 usageで省略可能なオプションは [] でくくるのが普通。 23行目sprintf(3)、argv[1] が 300バイトよりも大きい時バッファオーバフローの脆弱性があります。