Shammer's Philosophy

My private adversaria

文字配列の連結-Version20101105

文字列の連結-malloc_20101101 - Shammerismに、2つの文字列を連結する関数を書いたが、実際にプログラムを書く際にはもっと多くの文字列を一度に連結したいと思うことが多い。大は小を兼ねる、とも言うので、複数の文字列を一つの文字列として返す関数を書いてみた。

char * concat_string_array(char * array[], int arrayLength){
    int length = 0;
    char * value;
    if( arrayLength == 1 ){
	value = array[0];
    }
    else {
	char temp[1024];
	memset(temp, 0, sizeof(temp));
	int i;
	for( i = 0 ; i < arrayLength ; i++ ){
	    strcat(temp, array[i]);
	    length = length + strlen(array[i]) - 1;
	}
	length = length + 1; //This is for last '\0'
	temp[length] = '\0';
	value = (char *)malloc(length);
	memset(value, 0, sizeof(value));
	for( i = 0 ; i < length ; i++ ){
	    value[i] = temp[i];
	}
    }
    return value;
}

呼び出す側はこんな感じ。

int main(int argc, char * args[]){
    char * array[] = {"GET ","/", " HTTP/1.1\r\n"};
    printf("%s\n", concat_string_array(array, 3));
    return 0;
}

実行結果。

$ ./a.out 
GET / HTTP/1.1

$ 

見えている課題としては、連結する文字列が大きくて1024以上のサイズになる時がある。配列の文字列をカウントする関数も用意して、それを使用してサイズを決めるのがいいか。