• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:strcpyのエラー)

strcpyのエラーについて

このQ&Aのポイント
  • strcpyとは、文字列をコピーする関数ですが、使用時にエラーが発生することがあります。
  • エラーの原因は、ライブラリの問題やコピー文字列が大きすぎることなどが考えられます。
  • エラーを回避するには、strcpy_s関数を使用するか、_CRT_SECURE_NO_WARNINGSを使ってエラーメッセージを無効化する方法があります。

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

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

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

aiueo6391
質問者

お礼

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

その他の回答 (1)

回答No.1

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
質問者

お礼

回答ありがとうございます。

関連するQ&A