ライブラリ関数使わない方が速いんじゃないか。
文字列を2回操作する必要もないし、ましてや 0(n^2)なんてあり得ないし。

void conc3( int n, char** elem, int result_size, char* result ) {
nbsp;nbsp;nbsp;nbsp;char c, *e;
nbsp;nbsp;nbsp;nbsp;int i, wrote = 0;

nbsp;nbsp;nbsp;nbsp;result_size--; // convart to max of zero terminated string's
length

nbsp;nbsp;nbsp;nbsp;for( i = 0; i < n && wrote < result_size; i++ ) {
nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;e = elem[i];
nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;while( ( c = *(e++) ) != '\0' && wrote <
result_size ) {
nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;*(result++) = c;
nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;wrote++;
nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;}
nbsp;nbsp;nbsp;nbsp;}
nbsp;nbsp;nbsp;nbsp;*result = '\0';
}