• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:Visual Studio 2010 professional でst)

strcpy_s()関数をVisual Studio 2010 professionalで使用する方法

このQ&Aのポイント
  • Visual Studio 2010 professionalでstrcpy_s()関数を使用しようとするとerror C2660: 'strcpy_s' : 関数に2個の引数を指定できません。というエラーが表示されます。
  • 解決策として、親クラスだけでなく子クラスでも#include <string.h>を宣言することで、インテリセンスが表示され、オーバーロードされた関数を選択することができます。
  • Visual Studio 2010 professionalにおいて引数が2つのstrcpy_s()関数を呼び出すためには、親クラスと子クラスの両方で#include <string.h>を宣言し、引数には適切な値を指定する必要があります。

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

  • ベストアンサー
  • reset_cat
  • ベストアンサー率68% (94/138)
回答No.5

他の回答者さんはcharとwchar_tの違いを指摘していますが、エラーの内容が「引数が2つのstrcpy_s関数が無い」という内容なので、観点が違うかと・・・ string.hをインクルードする前に、以下のdefineをしているかどうか確認してください。 #define _CRT_SECURE_CPP_OVERLOAD_SECURE_NAMES 1 これでオーバーロードが有効になり、引数が2つでもエラーにならないはずです。詳細は参考URLにて・・・

参考URL:
http://msdn.microsoft.com/ja-jp/library/ms175759.aspx
Waizumi0712
質問者

お礼

まさしくreset_catさんのおっしゃるとおりでした. おかげさまで無事解決することが出来ました. defineしないといけないとか夢にも思いませんでした.今後,同じ問題を抱えた人がここを見て参考にしてもらえたらいいなと思います. 本当にありがとうございました.

その他の回答 (5)

回答No.6

実際にVS2010で試してみました。 Win32プロジェクトを新規で作成し、_tWinMainの中にコードを記述しました。 strcpy_sだと、error C2660のほかに「IntelliSense: オーバーロードされた関数"strcpy_s"のインスタンスが引数リストと一致しません」が表示されます。 _tcscpy_sに変更したところ、エラーなくコンパイルできました。 MSDNの説明にあるように、_CRT_SECURE_CPP_OVERLOAD_SECURE_NAMESは規定で1(有効)なので、記述の必要はないようです。

回答No.4

>logfont.lfFaceName および >cFontName はchar型の配列になっていますか? 引数が2つの_strcpy_sはどちらもchar型配列のときに使える関数です。 (C++のtemplateで配列引数を吸収できる。) 他の方もおっしゃっていますが、「Unicode文字セットを使用する」のコンパイルオプションですと >logfont が LONGFONT構造体の変数と仮定すると LONGFONT logfont; という宣言では、lfFaceNameメンバ変数がwchar_t型の配列になります。 本当にstrcpy_sを使うのであれば、 LOGFONTA logfont; として、CreateFontIndirectAあたりでフォントを作成してください。 まぁ、やらないでしょうが。 ちなみに、自分だったら警告消すために_tcscpy_sをつかうのもなぁ、 バッファオーバーランも確実に起こらないし、というときは API の lstrcpy を使っちゃいます。

回答No.3

> _tcscopy_sまたはwcscopy_s _tcscpy_sまたはwcscpy_s の間違いです。 失礼しました。

回答No.2

VS2010のプロジェクトの初期設定だと、UNICODEを使用するようになっていると思います。 その場合、LOGFONTのlfFaceNameは wchar_t lfFaceName[LF_FACESIZE]; となるので、strcpy_sの引数と型があわないと判断されるのではないでしょうか。 テンプレートタイプを呼び出したいのであれば、_tcscopy_sまたはwcscopy_sを使う必要があるのではないでしょうか。

  • jgk
  • ベストアンサー率75% (104/138)
回答No.1

引数2つにこだわるなら、strcpyだと思いますが。

Waizumi0712
質問者

お礼

迅速なお返事ありがとうございます. strcpyでも試してみましたが違うエラーが出てしまいました. どうやら私のミスでdefineしていなかったことが問題でした. ご迷惑をお掛けして申し訳ありませんでした.

関連するQ&A

専門家に質問してみよう