2016-04-03 11 views
-2

私はC++の学習プロセスを進めていますので、コンピュータで簡単に操作できるツールやツールをいくつか作っています。この例では、コンピュータ上にブラウザを配置するプログラムを作成しています(ブラウザのCookieなどを消去するために使用されます)。これをより効率的に行うためのより高度な方法はおそらくありますが、私はこれを現時点でできるだけシンプルに保つよう努めています。Const char concatenationとgetenv()

これまでのところ、「C:\ Program Files(x86)\ Google \ Chrome」というディレクトリが存在するかどうかを確認しようとしています。私はgetenv ("Program Files (x86)"を使用してプログラムファイルディレクトリにアドレスを取得しますが、残りのアドレスはどのように追加しますか? 変数がconst char *(bool PathIsDirectory()はconst char *をパラメータとして必要とするため)のために+演算子を連結に使用することはできません。

std::cout << "Searching for browsers..." << std::endl; 
const char *chromePath; 
chromePath = getenv ("ProgramFiles(x86)"); 

bool result = PathIsDirectory(chromePath); 

if(result == true) 
{ 
    std::cout << "-- Google Chrome - FOUND" << std::endl; 
} 
else 
{ 
    std::cout << "-- Google Chrome - NOT FOUND" << std::endl; 
} 
+0

'getenv'を使って' ProgramFiles'へのパスを実際に得ることができますか? 'getenv'は環境変数を取得するためのものです。 – ForceBru

+0

@ForceBruこれによると:http://stackoverflow.com/questions/9594066/how-to-get-program-files-x86-env-variable – vu1p3n0x

+0

私は 'ProgramFiles(x86)'が有効な環境変数を示しているのではないかと疑います。 –

答えて

3

あなたは( コメントで述べたように)std::stringオブジェクトにgetenv()の結果を格納することができます。あなたは上記のようにバックスラッシュをエスケープする必要があります

#include <string> 
//... 
std::string chromePath = getenv ("ProgramFiles(x86)"); 
chromePath += "\\remaining\\path"; 
bool result = PathIsDirectory(chromePath.c_str()); 

注:そして、あなたは次のように+演算子を使用してパスの残りの部分を追加することができます。

+0

問題は、PathIsDirectory()では文字列変数が許可されず、const char *のみがパラメータとして使用できます。私はしかし、Googleのchromeディレクトリへのパスの残りの部分に新しいconst char *変数を作成し、strcat(const char * variable 1、const char * variable 2)を使用して、それらを最終的な "フルパス" const char *変数は、PathIsDirectory()で使用するのに有効です。上記の私の答えを参照してください。 – saltcracker

+1

@peteshは質問のコメントで、 'yourstring.c_str()'を使って 'std :: string'から' const char * 'を得ることができます。あなたの自己回答は、未定義の行動を引き起こすので、それを行う安全な方法ではありません。 'std :: string'を使うことを検討してください。 – vu1p3n0x

+0

vu1p3n0xが正しいです。それに応じて私の答えを更新しました。 http://en.cppreference.com/w/cpp/string/byte/strcatをご覧ください。 strcatが実際にgetenv()の戻り値が指すメモリに書き込むことがわかります。それは間違っています。なぜならあなたはその記憶を持たないからです。 – tonisuter

関連する問題