文字列の連結
strcat という関数があると知ったので、早速試してみた。2 つの引数を取るようなので、戻り値が連結された文字になるのかなと思い、以下のように書いてみたが、Segmentation fault になってしまう。
#include <stdio.h> #include <string.h> int main(int argc, char* args[]){ char* value1 = "abcdefg"; char* value2 = "0123456789"; char* value = strcat(value1, value2); printf("%s\n", value); return 0; }
man で調べてみると、「 If dest is not large enough, program behavior is unpredictable;」とある。dest というのが第一引数。上の例だと、value1 が大きくないといけない。まったく新しい文字列を返すようなものがほしいのだが・・・これは自作しないとダメかもしれない。man で表示された strncat も自分の希望にあうものではなさそう。
と、言うわけで書いてみました。
#include <stdio.h> #include <string.h> int main(int argc, char* args[]){ char* value1 = "abcdefg"; char* value2 = "0123456789"; int len_value1 = strlen(value1); int len_value2 = strlen(value2); int length = len_value1 + len_value2; char value[length]; int i; for( i = 0 ; i < len_value1 ; i++ ){ value[i] = value1[i]; } for( i ; i < length ; i++ ){ value[i] = value2[i - len_value1]; } printf("%s\n", value); return 0; }
関数にはなっていないけれども、とりあえず連結には成功。
$ gcc concatenate-sample.c $ ./a.out abcdefg0123456789 $