title: how can popen(_popen) work in windows when cmd has blank and Special symbols in it?
body: <pre><code>std::string cmdPopen(std::string cmdLine)
  {
      char buffer[4096] = {'\0'};
      FILE* pf = NULL;
      pf = _popen(cmdLine.c_str(), &quot;r&quot;);
      if (NULL == pf) {
          printf(&quot;open pipe failed\n&quot;);
          return std::string(&quot;&quot;);
      }
      std::string ret;
      while (fgets(buffer, sizeof(buffer), pf)) {
          ret += buffer;
      }
      _pclose(pf);
      return ret;
  }
  </code></pre>
  <p>when I call
  cmdPopen(&quot;cmd /c \&quot;D:/1 2 3/1.exe\&quot;&quot;);
  It works fine.</p>
  <p>BUT when I call
  cmdPopen(&quot;cmd /c \&quot;D:/1 2 3~!@#$%^&amp;()_,.;'[]{}~！@#￥%……&amp;（）——+：“《》？/1.exe\&quot;&quot;);
  I can't get corrct result</p>
  <p>&quot;D:/1 2 3~!@#$%^&amp;()_,.;'[]{}~！@#￥%……&amp;（）——+：“《》？/1.exe&quot; is a legal path in windows</p>
  <p>Both path exist</p>