>>strdup()は非標準。 
これは知らなかった。すいません。勉強になります。

>>main()内のmalloc()の引数はsizeof (char *) * numだろ。mallocの戻り値のキャストは不要。 
多分どっちも4を返すと思うんですが。これはちょっとわからない。型が違うのはちょっと怖いな。

>>その直後のmemsetは不要。 
これは、メモリスマッシュ(だっけ??)防止のための保険の意味合いが強いです。
無くても動くには動きますね。コーディングスタイルというところでしょうか。

>>そもそも問題に文字列3つとあるのだからchar *bufs[MAX_COUNT];で十分。 
これは納得。*bufs[MAX_COUNT];で良いかはわかりませんけど。