
Visual Studio 2010 professional でstrcpy_s()関数を使用しようとしているのですが,
error C2660: 'strcpy_s' : 関数に 2 個の引数を指定できません。とエラーが出てしまいます.
実際のコードでは以下のように記述しています.
strcpy_s(logfont.lfFaceName, cFontName);
具体的に取った行動は#include <string.h>を親クラスだけでなく子クラスでも宣言しました.しかし,インテリセンスも出ないためオーバーロードした関数の選択も出来ません.常に引数が3個の関数を勝手に呼び出そうとしてエラーが出ます.
Visual Studio 2010 prfessionalにおいて引数が2つのstrcpy_s()関数を呼び出すためにはどうすればよろしいでしょうか.
私の知識と技術では解決することができないため,みなさんのお知恵を拝借できないでしょうか.
開発環境
Windows 7(32bit版)
Visual Studio 2010 professional
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 …
まさしくreset_catさんのおっしゃるとおりでした.
おかげさまで無事解決することが出来ました.
defineしないといけないとか夢にも思いませんでした.今後,同じ問題を抱えた人がここを見て参考にしてもらえたらいいなと思います.
本当にありがとうございました.
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.2
- 回答日時:
VS2010のプロジェクトの初期設定だと、UNICODEを使用するようになっていると思います。
その場合、LOGFONTのlfFaceNameは
wchar_t lfFaceName[LF_FACESIZE];
となるので、strcpy_sの引数と型があわないと判断されるのではないでしょうか。
テンプレートタイプを呼び出したいのであれば、_tcscopy_sまたはwcscopy_sを使う必要があるのではないでしょうか。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
このQ&Aを見た人はこんなQ&Aも見ています
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
python エラー
-
エクセルのエラーメッセージ「4...
-
デバッグ中のエラーのことで教...
-
fortranでプログラムを実行する...
-
Excelのエラーで困ってます。
-
C# 固定長ファイルの取得 FileGet
-
Visual Studioのstrcpy_sについて
-
VB2008で定数に色の設定をした...
-
レコードセットをcloseする所で...
-
ビルド失敗 指定されたファイ...
-
適切な変換関数が存在しない???
-
ccコマンド時の0711-317エラー
-
「指定したフォルダにあるファ...
-
コンパイルできません。
-
sys/time.hのインクルードがで...
-
vbaのインポートでエラー
-
WindowsからLinuxへの移植
-
バッチからsqlplusの接続エラー...
-
multiple definitionというエラー
-
別環境に移植するとヘッダファ...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
python エラー
-
エクセルのエラーメッセージ「4...
-
Excelのエラーで困ってます。
-
適切な変換関数が存在しない???
-
fortranでプログラムを実行する...
-
コンパイルできません。
-
ビルド失敗 指定されたファイ...
-
VB2008で定数に色の設定をした...
-
バッチからsqlplusの接続エラー...
-
HEWを使用しているのですが、こ...
-
デバッグ中のエラーのことで教...
-
visual C++ でビルドの中止がで...
-
DLL関数を使ったプログラム
-
Arduinoに関する質問
-
sys/time.hのインクルードがで...
-
Visual Studioのstrcpy_sについて
-
BC30002: 型 'ListItem' が定義...
-
RightとLeft関数のライブ...
-
VBAでファイルを開くプログラム...
-
HANDLEの宣言でのエラー
おすすめ情報