C++を使っていてC4996警告に悩まされ時があると思います。その対策について解説します。文字列を文字列へ繋げる処理はよくやると思います。StudioでビルドするとC4996警告が表示されます。(バッファオーバーフローに気を使っているので、ちょっと長いです。details.strcpy()やstrcat()の代わりにstrcpy_s()やstrcat_s()を使うか、_CRT_SECURE_NO_WARNINGSを使って警告をディセーブルするよう書かれています。2.確実な対策そこで、strcpy_s()とstrcat_s()の解説を見て、下記のように修正すると警告は消えます。0;}さて、strcpy_s()やstrcat_s()が何をしてくれるかというと、バッファオーバーフロー対策です。パラメータが不正にNULLだったり、バッファ・サイズを超えるようなコピーをしようとしたら、プログラムを停止させます。このように頑張っても、元々バッファオーバーフロー対策ができていたら、意味はありません。バッファオーバーフロー対策が不十分なことも考えられるため、使っておくと安心と思います。3.手抜きな対策しかし、単にC言語を勉強しているだけの人もいると思います。C言語自身は小型CPUのファームウェアやlinuxのカーネル等、アチコチで使われていますが、そのような分野でC言語の標準ライブラリに頼るケースは、経験的にかなりレアと思います。小型CPUのファームウェア開発では、Cコンパイラを使いますが、標準ライブラリを使うような贅沢はなかなかできないです。C言語しか使えない人より、C++も使える人の方が需要は多いですので、C言語をある程度マスターできたらC++へ進もうと考えている人も多いと思います。そのような人にとって、設計が古く制約が多いC言語の標準ライブラリを使いこなすことに時間をかけることは惜しいと思います。(C言語の標準ライブラリを実務で実際に使うかどうか分からない時は特に。)また、あなたのプログラムが使っているライブラリがstrcpy()等を使っているけど、そのライブラリの信頼性が十分に高い場合もあるでしょう。その場合、下手に修正するわけにはいきません。そのような学習中のソフト(信頼する必要がない)や信頼できるソフトの場合は、エラー・メッセージにあるように_CRT_SECURE_NO_WARNINGSを定義して警告を表示させないのも手です。ソース・コードの先頭で#defineします。main(){以下略ただ、この方法の場合、使っているライブラリ・ヘッダのインクルード時だけ警告をディセーブルするようなことなどができません。warningを使えば可能です。区間を指定するならマクロを定義して使いたいです。下記のようにマイクロソフト独自の__pragma(warning)を使えば、信頼できる部分だけC4996警告を禁止することができます。ここではstrcat()周辺のみ警告をディセーブルしてます。0;}4.因みにC++なら最後に、同様な処理をC++を使って実装したら下記のようになります。オーバーフロー対策は標準ライブラリに任せることができるので安心です。バッファが不足したら自動的に拡張されるので、バッファ不足エラー・チェックも省けます。0;}C++は難しいと言われます。確かに全てを学ぼうとすると、本当に難しいです。全てを使う必要は全くありません。多くのCコンパイラはC++もコンパイルできますので、使える部分だけ使えば良いのです。そのようなC++の便利機能をここに纏めてますので参考にしてみて下さい。その関連会社の商標です。コメントをキャンセルメールアドレスが公開されることはありません。テクノロジーの登録商標です。technology.。