Shammer's Philosophy

My private adversaria

文字配列の連結-Version20101116

文字配列の連結-Version20101105 - Shammerismの内容に配列全体の文字数をカウントする - Shammerismをマージ。

char * concat_string_array(char * array[], int arrayLength){
    char * value;
    if( arrayLength == 1 ){
	value = array[0];
    }
    else {
	int array_size;
	int length = 0;
	array_size = string_array_length(array, arrayLength);
	value = (char *)malloc(array_size);
	memset(value, 0, sizeof(value));
	int i, j;
	for( i = 0 ; i < arrayLength ; i++ ){
	    int len = strlen(array[i]);
	    for( j = 0 ; j < len ; j++ ){
		value[length++] = array[i][j];
		printf("%s\n", value);
	    }
	}
	length = length + 1; //This is for last '\0'
	value[length] = '\0';
    }
    return value;
}

呼出側は以下のような感じ。

int main(int argc, char * args[]){
    printf("%d\n", string_array_length(args, argc));
    printf("123456789012345678901234567890123456789012345678901234567890\n");
    printf("%s\n", concat_string_array(args, argc));
    printf("123456789012345678901234567890123456789012345678901234567890\n");
    return 0;
}

実行結果。

$ ./a.out lll kkk iii 091234
23
123456789012345678901234567890123456789012345678901234567890
.
./
./a
./a.
./a.o
./a.ou
./a.out
./a.outl
./a.outll
./a.outlll
./a.outlllk
./a.outlllkk
./a.outlllkkk
./a.outlllkkki
./a.outlllkkkii
./a.outlllkkkiii
./a.outlllkkkiii0
./a.outlllkkkiii09
./a.outlllkkkiii091
./a.outlllkkkiii0912
./a.outlllkkkiii09123
./a.outlllkkkiii091234
./a.outlllkkkiii091234
123456789012345678901234567890123456789012345678901234567890

とりあえず、全て連結できていそうだ。
期待通りの動作をしているようには見えるが、for を二回ループさせているのが美しくないと思ってしまう。これ、なんとかならんものか。