文字配列の連結-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 を二回ループさせているのが美しくないと思ってしまう。これ、なんとかならんものか。