none
「error C2660: 'strcpy_s' : 関数に3 個の引数を指定できません」ビルドエラーについて RRS feed

  • 質問

  • VC++6にて作成したDLLのソースコードを Visual Studio 2005 にてビルドすると「c:\program files\microsoft visual studio 8\vc\atlmfc\include\atlchecked.h(82) : error C2660: 'strcpy_s' : 関数に 3 個の引数を指定できません。」とのエラーが表示されます。

    _CRT_SECURE_NO_DEPRECATE の記述をプロパティ>c/c++のプリプロセッサの定義に加え、セキュリティのエラー回避を試みましたがやはり駄目でした。

    ソースコードに対して一度、strcpy を strcpy_s に変更も行ってみて、現象が改善しないのでstcpyに戻しました。ソースコード内にはstrcpy_sは使用している箇所は現在ありません。プロジェクト内からの検索にも引っかかりません。

    原因がまったく不明です。 どなたか詳しい方がいらしゃいましたら助言をお願い致します。

    宜しくお願い致します。

    2006年12月8日 0:43

すべての返信

  • atlchecked.h 内でエラー発生しているのでそちらの中をチェックするべきではないでしょうか?

    2006年12月8日 1:08
  • \vc\atlmfc\include\atlchecked.h は MicroSoft Visual Studio 2005 が提供しているインクルードファイルですが、この記述に問題があるのでしょうか? 試してみます。

    2006年12月8日 7:50
  • 実際にはエラーがでているコードは、どんなコードなんでしょう?

    私は、以下のようなコードを書いてますが、特にエラーはでてないですよ。

    ---
    int nHoge = 0;
    _stscanf_s(szHoge, _T("%d"), &nHoge);

    TCHAR chHage = _('\0')
    _stscanf_s(szHage, _T("%c"), &chHage, sizeof(TCHAR));
    ---

    2006年12月8日 8:43
  • ご回答ありがとうございます。

    構造体の文字列を渡す処理を行っています。

     strcpy ( pElmf->elm.cp.szName, pComp->name ) ;

    VC++6では問題無くビルドができていましたが、Visual Studio 2005では、エラーが発生しビルドできません。

     

    2006年12月11日 0:25
  • おっと、ごめんなさい。sscanf_sとstrcpy_sで勘違いしていました。

    strcpy_sには第二引数が追加されており、コピー先のバッファのサイズを
    指定する必要があります。

    詳しくは、以下のドキュメントを読んでみてください。


    ■strcpy_s、wcscpy_s、_mbscpy_s - MSDN
    http://msdn2.microsoft.com/ja-jp/library/td1esda9(VS.80).aspx

    2006年12月13日 13:46
  • よく分からないのですが、このビルドエラーが出る最小のコードというものはありますか?

    もしくは、Visual Studio で Project の Property を開いて、プリプロセッサの項目から「前処理済みのファイルの生成」を「行番号済み /P」にして、strcpy_s がどうなっているのかを確認されてみるのは如何でしょうか?

     

    2006年12月14日 1:54
  • strcpyをstrcpy_sに変更し、#include <string.h> と #pragma warning(disable:4996) にてワーニングを止める事で

    DLLが作成できました。

    いろいろとご意見を頂きまして、誠にありがとうございました。

    2006年12月18日 10:49
  • 助けました
    2014年7月31日 7:55