- ベストアンサー
strcpyのエラーについて
- strcpyとは、文字列をコピーする関数ですが、使用時にエラーが発生することがあります。
- エラーの原因は、ライブラリの問題やコピー文字列が大きすぎることなどが考えられます。
- エラーを回避するには、strcpy_s関数を使用するか、_CRT_SECURE_NO_WARNINGSを使ってエラーメッセージを無効化する方法があります。
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
なぜ非推奨かというとですが・・・ strcpy(buffer,<ここにあるもの>); <ここにあるもの>が、バイトコードで0になるまでをコピーする特性と bufferの長さを見ていない特性の2つが問題で。 もし、0で終わる文字ではないものをコピーすると、bufferを 破壊して、それでも止まらずあちこちのメモリを破壊する習性がありまして。 同じ理由で0で終わる文字だったとしても、bufferが 適切な長さではない場合は、存在しないメモリ(他人のメモリ) を書き換える/破壊するなどの問題を起こすため、 こういう警告がついているという具合です。 いうなればこういう状態 char buffer[3]; strcpy(buffer,"ABC"); ABCは3文字だから大丈夫と思っていると、実は0で終わる文字なので、 ”ABC"+"\0"と、4バイト必要です。 しかし、3バイトしか確保していないので、 隣接する他のメモリを1バイト壊したよ?ってことです。
その他の回答 (1)
- AsarKingChang
- ベストアンサー率46% (3467/7474)
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); など・・
お礼
回答ありがとうございます。
お礼
回答ありがとうございます。 そういうことでしたか、理解していませんでした、申し訳ありません。 破壊・・・、気を付けないと、自分で自分のPCを破壊することになるということですよね。 とても怖いですね、気を付けます。