透2017/6/262019/4/2strcpyって使ってますか?strcpyは文字列型データをコピーするために使用する関数です。文字列はchar型の配列やchar型のポインタとして扱われます。文字列型のデータを数値型のデータのように「=」記号を使って代入コピーしようとしても、配列の場合は代入できなかったり、ポインタの場合はアドレス先をコピーすることになるなど、意図通りにならないので注意が必要です。この記事では、文字列のコピーについて文字列の代入についてstrcpyの使い方についてstrcpyを使用する上での注意strcpy_sの使い方など、よくやりがちなコピーの内容から、関数を使った文字列のコピーについてまで解説していきます。まとめ文字列の代入について文字列型のデータのコピーは数値型のデータのように「=」記号を使って代入コピーしようとしても、意図通りになりません。配列の場合は代入することができません。ポインタの場合はアドレス先をコピーすることになります。サンプルコードで確認していきましょう。World!このサンプルコードでは、まずchar型配列「str1」を「=」記号を使って「str2」に代入しようとしています。コメントアウトしています。次にchar型のポインタ「ptr1」に「str1」のアドレスを代入しています。「ptr1」のアドレスを「=」記号を使って「ptr2」に代入しています。結果「ptr1」と「ptr2」はアドレスが同じで、「ptr2」は「ptr1」の値と同じ値を表示しています。この場合、「ptr1」は「str1」のアドレスですので、「str1」の最初の文字を「H」から「h」に変更すると「ptr1」の表示も変わりますが、「ptr2」の表示も変わりますので注意が必要です。strcpyの使い方について前述の理由で文字列のコピーには「=」記号を使った代入ではなく、strcpy関数を使用するのが一般的です。strcpy関数はヘッダーファイル「string.h」をインクルードして使用します。strcpyの第1引数にはコピー先のアドレス、第2引数にはコピー元のアドレスを記入します。それではサンプルコードで確認していきましょう。World!このサンプルコードでは文字型配列「str1」を「str2」へstrcpy関数を使ってコピーしています。strcpyを使用する上での注意strcpyで文字列をコピーする場合、バッファーオーバーフローについて注意する必要があります。バッファオーバーフローのバッファとは、メモリ上に確保する領域のことを指します。オーバーフローとは、バッファがあふれた状態を指します。メモリ上に確保されたバッファがあふれ、意図しない動作を引き起こすことがあります。隣接したメモリのアドレスに不正に上書きするなどです。C言語では変数で確保したバイト数以上に、値を代入することができてしまいます。サンプルコードで確認しましょう。World!先ほどのサンプルコードと同じように、文字型配列「str1」を「str2」へstrcpy関数を使ってコピーしています。str1のバイト数が16に対して、str2で確保したメモリのバイト数は4で足りていません。C言語では確保したバイト数が足りなくてもそのまま処理してしまいます。StudioのC++の環境でコンパイルする際には注意が必要です。VisualC++ではstrcpy関数を使用するとコンパイルエラーが発生し、strcpy_s関数を使うようにメッセージが表示される場合があります。strcpy_s関数を使う場合は、文字列で受け取るメモリ領域のサイズを指定する必要があります。strcpy_sの第1引数にはコピー先のアドレス、第2引数にはコピー先のバッファサイズ、第3引数にはコピー元のアドレスを記入します。コピー元のアドレス)サンプルコードで確認しましょう。2019年5月20日まとめここでは、文字列をコピーする方法について説明しました。「=」記号を使った代入では意図通りにコピーすることができない場合があります。strcpy関数を使って文字列をコピーすることができるように、この記事を何度も参考にして下さいね!TweetPocket無料でSEからWebエンジニアへ転職しませんか?侍エンジニア塾では、完全未経験の方から現在SEだけどプログラミングはやっていないという経験者まで、幅広い方々の人生を好転させるプログラミング指導を行ってきました。SEの方とお話していくなかで、システムエンジニアという職業だけどコードが書けない事務作業が多くスキルがないため将来が不安スクールに通うと完全未経験者と同じスタートになるからレベルが合わないという、すでに知識があるSEならではのお悩みがあることに気づきました。弊社では、マンツーマンでレッスンを行いますので、現在お持ちの知識レベルからカリキュラムを作成いたします。こちらの転職コースは無料で受講を始められて転職成功でそのまま卒業できるというとてもお得なコースとなっています。知識のあるSEといっても転職は年齢が若いほど受かりやすいため、まずは無料体験レッスンで今の現状や理想の働き方について一緒に考えていきましょう。熊本在住のフリープログラマ兼ライターです。C/C++/C#、Java、Python、HTML/CSS、PHPを使ってプログラミングをしています。専門は画像処理で最近は機械学習、ディープラーニングにはまっています。幅広くやってきた経験を活かしてポイントをわかりやすくお伝えしようと思います。お問合せはこちらでも受け付けています。