2

このドキュメントに従って、C++ で環境変数を読み取ろうとしています。私のコードは次のようになります。

char * val;
val = getenv( "smartDir" );

ShowMessage( val );

delete val;

私の問題は、環境変数が存在しないかのように、常に val が NULL になることです。ただし、ここでわかるように、変数が明確に定義されています。

ここに画像の説明を入力

ここで何が間違っていますか?

4

1 に答える 1

5
  1. によって返されたポインタを削除しないでください(ここgetenvを参照してください、未定義の動作に関する部分)
  2. グローバル環境を変更する場合は、その環境に注意してください。開始時に process に割り当てられ、すべての子プロセスが親からそれを継承します。そのため、env の変更前に開始された IDE/コンソールからプログラムを開始すると、その子プロセスには反映されません。

テストを簡単にするために、ほとんどの IDE は「デバッグ」設定の下に「環境」設定を提供します - 子プロセス (プログラム) に渡される環境変数を変更できます (Visual にはそれがあり、QtCreator にはそれがあり、C++Builder にはおそらくそれもあります。 )

コンソールからプログラムを実行する場合:SET var=valueグローバル環境を変更する代わりに使用して、環境を子プロセスに渡す前にローカルに変更します。

どちらのソリューションもグローバル環境を変更せず、さまざまな環境設定をすばやくテストできます。

于 2015-08-28T15:25:45.437 に答える