[])は、代入演算子(=)による文字要素のコピーが行えません。いずれの型もポインタで表現されているため、代入演算子による処理はあくまでポインタのアドレスをコピーするものとなり、参照先の実体は同一のものとなります。assignableC言語で文字列連結を実現する方法としては、strcpy関数を用いる方法が知られていますが、この方法にはバッファオーバーランの危険性があるため注意して利用する必要があります。snprintf関数やstrlcpy関数の利用も検討してみてください。目次strcpy/strncpy関数による文字列コピー(バッファオーバーランに注意して利用する)snprintf/strlcpy関数による文字列コピー(簡潔な方法、暗黙の切り捨てに注意)固定長の文字列をコピーする(ヌル終端されていない文字配列など)部分文字列のコピーを行う(文字列の一部をコピーする方法)strdup関数による便利な文字列複製(面倒な手順を簡略化する)可変長配列へのコピーstrcpy/strncpy関数による文字列コピーstrcpy関数を用いることで、文字列要素のコピーを実現することができます。strcpy関数は、第二引数に指定された文字列を第一引数に指定された配列に書き込みます。'\0'}strcpy関数には、書き込み先の配列のサイズを超えた過剰な書き込みが発生する危険性(バッファオーバーラン)があるため、実際にstrcpy関数を用いる際には、配列のサイズと追加元の文字列の長さをチェックし、安全な場合にのみコピーを行うようにする必要があります。-1;}なお、コピーする長さを指示することのできるstrncpy関数も存在しますが、ナル文字が書き込まれないケースが存在するため、注意が必要です。手動で終端ナル文字を書き込む参考:strncpy関数の問題点と脆弱性/安全な利用方法snprintf/strlcpy関数による文字列コピーsnprintf関数は文字列のコピーの用途としても活用することができます。第二引数に指定された長さを超えた書き込みは発生しません。'\0'}同等の処理は、strlcpy関数やstrcpy_s関数で実現することもできます。こちらは標準関数ではないため、利用できる環境が限られています。'\0'}なお、snprintf関数やstrlcpy関数によるコピー方法では、指定された長さを超えた分の文字列は書き込まれなくなる点に注意する必要があります。バッファーオーバーランの危険性は回避できても、書き込まれるべき文字列が書き込まれなくなることにより、別の新たなバグに繋がってしまう危険性があります。固定長の文字列をコピーするヌル終端されていない固定長の文字配列をコピーする場合には、長さ指定が可能なmemcpy関数を用います。memcpyの第三引数にはコピーしたい長さを指定することができます。必要に応じて終端ナル文字を書き込むまたsnprintf関数を用いて固定長の文字列を書き込むこともできます。'\0'}ただし、コピー元の文字列にナル文字が含まれている場合には、ナル文字が出現した時点でコピーが完了してしまうため注意が必要です(マルチバイト文字列やバイナリを扱う場合など)。'-'}('c'が書き込まれない)同じ理由でstrncpy関数を用いることができません。代わりに先程紹介したmemcpy関数を用いる必要があります。固定長の文字列をコピーする際と同様にmemcpy関数を用います。1という形でポインタのオフセットを明示する必要があります。2や&s[2]という形でオフセットを明示します。ないため移植性には難がありますが、POSIX規格のstrdup関数でメモリ確保とコピーを一度に行うこともできます。メモリ解放strdup関数はコピー処理やメモリの動的確保、エラー処理等を簡略化する目的に利用することができます。strdup関数strdup関数は受け取った文字列を動的確保された新たなメモリ領域にコピーし、その領域を指したポインタを戻り値として返します。動的確保が失敗した際にはNULLが返されます。多用は危険ですが、可変長配列などによる配列の自動割り当てが行える環境であれば、以下のような方法を用いることもできます。'\0'}可変長配列に巨大なサイズを指定した場合にはスタックオーバーフローが発生します。array)はC言語の機能であり、C++言語(C++17)では正式な機能ではなく、あくまでコンパイラの独自拡張として提供されている場合があるため注意してください。