• ベストアンサー
  • 困ってます

strcpyのエラー

  • 質問No.9746013
  • 閲覧数86
  • ありがとう数2
  • 回答数2

お礼率 69% (301/435)

こんばんは。
困りました、また文字列に関するエラーです。
文字列の例題でsprcpyを使おうとすると必ず出ます。
何やら調べてみるとライブラリの問題だとかコピーする文字列が大きすぎてコピー先のバッファに入らない場合これを通知する方法がないからとか色んなエラーの原因が述べられています。
エラーを出さずにビルド、コンパイルして実行するにはどのような方法が
一番良いのでしょうか?
ご教示お願いします・・・。

エラーの詳細
重大度レベルコード説明プロジェクトファイル行抑制状態
エラーC4996'strcpy': This function or variable may be unsafe. Consider using strcpy_s instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. See online help for details.

質問者が選んだベストアンサー

  • 回答No.2
  • ベストアンサー

ベストアンサー率 50% (1628/3220)

他カテゴリのカテゴリマスター
なぜ非推奨かというとですが・・・

strcpy(buffer,<ここにあるもの>);
<ここにあるもの>が、バイトコードで0になるまでをコピーする特性と
bufferの長さを見ていない特性の2つが問題で。
もし、0で終わる文字ではないものをコピーすると、bufferを
破壊して、それでも止まらずあちこちのメモリを破壊する習性がありまして。
同じ理由で0で終わる文字だったとしても、bufferが
適切な長さではない場合は、存在しないメモリ(他人のメモリ)
を書き換える/破壊するなどの問題を起こすため、
こういう警告がついているという具合です。
いうなればこういう状態
char buffer[3];
strcpy(buffer,"ABC");
ABCは3文字だから大丈夫と思っていると、実は0で終わる文字なので、
”ABC"+"\0"と、4バイト必要です。
しかし、3バイトしか確保していないので、
隣接する他のメモリを1バイト壊したよ?ってことです。
お礼コメント
aiueo6391

お礼率 69% (301/435)

回答ありがとうございます。
そういうことでしたか、理解していませんでした、申し訳ありません。
破壊・・・、気を付けないと、自分で自分のPCを破壊することになるということですよね。
とても怖いですね、気を付けます。
投稿日時:2020/05/08 21:39

その他の回答 (全1件)

  • 回答No.1

ベストアンサー率 50% (1628/3220)

他カテゴリのカテゴリマスター
https://docs.microsoft.com/ja-jp/cpp/error-messages/compiler-warnings/compiler-warning-level-3-c4996?view=vs-2019
これなんですが。前回言った通り現在非推奨の関数なので、
こうなってるんですが。
同じ理由で
"str"で始まるほとんどの関数が、同じワーニングになります。
strcatなども
char buffer[256];
strcpy(buffer,"i am ");
strcat(buffer,"people"); /* bufferの「後ろ」に文字を結合 */
printf("%s\n",buffer);
など・・
お礼コメント
aiueo6391

お礼率 69% (301/435)

回答ありがとうございます。
投稿日時:2020/05/08 21:39
関連するQ&A

その他の関連するQ&Aをキーワードで探す

ページ先頭へ