CAD日記

主にAutoCADのことについて書いているけど、近頃は投資系ネタに注力している。自動売買、仮想通貨、PC関係、プログラミングなど。@caddiary

ソフト開発

VC2017でWindowsの環境変数を取得する方法

投稿日:

C++のUnicodeプロジェクトにおいて、_wgetenvでWindowsの環境変数が取得できるのはわかる。

こんなソースがあって、ビルドしたらエラーになった。

error C4996: ‘_wgetenv’: This function or variable may be unsafe. Consider using _wdupenv_s instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. See online help for details.
ようするに、セキュリティ付きの関数である_wdupenv_sを使わないとダメだよということ。

プロジェクトのプロパティ⇒C/C++⇒全般⇒SDLチェックを「いいえ」にすればワーニングで済む。
さらにはワーニングの4996を無視してしまえば、ワーニングすら出ないようにすることはできる。
それも気持ち悪いので、セキュリティ対応した_wdupenv_sの使い方を記録しておく。

-ソフト開発

執筆者:


  1. コーイチ より:

    久しぶりにコメントします。
    https://docs.microsoft.com/en-us/cpp/c-runtime-library/reference/dupenv-s-wdupenv-s?view=vs-2017

    Notes
    It is the calling program’s responsibility to free the memory by calling free.

    と書いてあるので、_wdupenv_s()自体が、戻り値をコピーするバッファの割り当てを行うみたいなので、自前でnew しないで、メモリを解放すれば良いみたいですね。

  2. com より:

    _wdupenv_sじゃなくて、_wgetenv_sなのでちょっと違う感じですね。わざわざメモリーサイズ取得して、メモリー取得して、さらにメモリー破棄しないといけないわけで、チョーメンドウですよ。セキュリティ対策前の_wgetenvは何もしなくてよかったんですけどね。
    https://docs.microsoft.com/ja-jp/cpp/c-runtime-library/reference/getenv-s-wgetenv-s?view=vs-2017

comment

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください

関連記事

no image

KB2538242

また、VC2005再頒布可能パッケージの新しいものが出た。 昨日のWindowsUpdateでそれっぽいのが出てきたから、 もしやと思ったらビンゴだった。 Microsoft Visual C++ 2 …

no image

VisualStudio2005

帰国後の1週間を乗り切った。 バカンスモードの体からビジネスモードに切り替えるのは、 なかなか厳しかったが、この1週間で徐々に慣れてきた。 夢のような南国リゾートとは違い、現実世界は厳しい。 さて、V …

PDFアレコレVer1.01リリース

趣味のプログラムってホント楽しくて、平日の夜中だってのに眠りを忘れて取り組んでしまった。

Teigha改めODAでDWGをDXFに変換するプログラムをつくってみよう!【Part.1】

Teigha改めODA(Open Design Alliance)は有料のライブラリー。商用利用するならば、最低でも年間1500ドル(初年度2000ドル)を要する。この場合、配布本数が100本に限られ …

PDFium ViewerによるPDFレンダリングがイケてる

PDFが電子ペーパーの絶対的な標準になったなか、PDFをプログラムであつかうのがとても簡単になってきた。