pid_t pid;
if(fork==0){
execl(/usr/local/bin/xxxx", "xxxx", result_filename, input_filename);
}
else{
int status;
wait(&status);
}

上のようにxxxxを実行すると、結果格納ファイルであるresult_filenameが文字化けします。
しかし、

const char *ch="xxxx result_filename input_filename"
system(ch);

というように実行するとresult_filenameは文字化けしません。
自分には全く原因がわからないんですが、何故なんでしょうか?