2016-08-09 10 views
-1

私は、このコードによって開かれたファイルの名前/パスを使用して使用するpopenとargv [1](ファイル名)

FILE* lsofFile_p = popen("c:\\adb install " + argv[1] , "r");

とargvにより、その出力をトレースする[1]この方法ではエラーが発生します

+0

建物に何のエラーがありますか?あなたが参照しているライブラリは何ですか? –

+0

これはCコードです。なぜC++タグですか? C++では、あなたはなく、私のライブラリも の#include の#include の#include の#include

+0

はいを​​持っていますFILE * lsofFile_p = popen(std :: string( "c:\\ adb install")+ argv [1])エラーを返します。それは "r"のために行の中にない行方不明の意味です –

答えて

1

char[]型の配列リテラルをchar*型に追加しようとしていることが基本です。型が一致しないため、コンパイラはそれを好まないでしょう。

文字列を連結するために(std::string("c:\\adb install ") + argv[1]).c_str()を書くと修正されます。これは、演算子オーバーロード+からstd::stringに、そしてc_str()が文字バッファを抽出することに依存します。だから、全額:

FILE* lsofFile_p = popen((std::string("c:\\adb install ") + argv[1]).c_str(), "r");

argvの要素を読み取る前かかわらargcの値をチェックしてください。

+0

のthatsの#includeしているライブラリからのビルドでより良いの '' FILE *を使用するよりもオプション... –

+0

私は、あなたが間違った場所にあなたのc_str()を持っている必要があるという完全なテキストを書いています。 – Bathsheba

+0

どうもありがとうございます。でも、このコードをカスタマイズするにはリファレンスリンクを追加してください。たとえば、この行でエラーが発生すると、char配列でどのように使用できますか?FILE * lsofFile_p = popen((std ::文字列( "c:\\ adb connect")+ ip [20])。c_str、 "r"); とip [20] = 192.168.156.655:6985たとえば、 –

関連する問題