質問: 掲題の件につき、System()関数の動作が理解できずはまってしまっています。 どなたか、ご存知の方ご教示いただけないでしょうか。 【開発環境】Visual Studio 2019 【開発言語】C++によるコンソールプログラム 【対象OS】Windows 10 【やりたいこと】 C++のSystem関数を使ってcurlコマンドまたはInvoke-RestMethodコマンドを実行する 【困っていること】 以下の記述では「'C:\Windows\System32\curl.exe' は、内部コマンドまたは外部コマンド、操作可能なプログラムまたはバッチ ファイルとして認識されていません。」と言われてしまいます。 ``` system("C:\\Windows\\System32\\curl.exe curl http://www.google.co.jp "); ``` ちなみに、コマンドプロンプト上で、curlをwhereした時の結果は以下の通りです。 ``` C:\Users\shupe>where curl C:\Windows\System32\curl.exe ``` この状況を改善する方法があればご教示いただきです。もしくは「そもそもそういうことはできない」という指摘でもいただければこの方式を選択肢から除外して考えられるのでありがたいです。お手数ですが、ご支援よろしくお願いします。 【他に試してみたこと】 上記のコマンドを実行するバッチファイルを作成しSystem関数で呼び出したのですが、やはり「curl」なんてないよと怒られます。。(フルパスなのに) 【やっていないこと】 Visual Studioのソリューションの設定変更は実施しておらず、デフォルトのまま利用しています。
回答: 質問文の ``` system("C:\\Windows\\System32\\curl.exe curl http://www.google.co.jp "); ``` をコピペしたところ問題なく実行できました。`C:\Windows\System32\curl.exe`の存在は確認されているとのことなので、誤字の可能性が考えられます。その場合、生文字列リテラルが有効です。生文字列リテラル内では一切のエスケープが無効になるため、`\`もそのまま書けます。 加えて`curl`という引数は誤りで不要と思われます。 ``` system(R"(C:\Windows\System32\curl.exe http://www.google.co.jp)"); ``` またWindowsではパスの区切り文字として`/`も使用可能なので ``` system("C:/Windows/System32/curl.exe http://www.google.co.jp"); ``` と書くこともできます。 ちなみに`curl.exe`はWindows 10 ver.1803で追加されたものですので、それ以前のバージョンには含まれていません。(質問者さんは`curl.exe`の存在を確認済みなため該当しませんが念のため)