2017-11-06 6 views
0

私の問題は簡単には思えませんでした。 私はプログラムのmain()で受け取っている正確なcmd行引数を保存することに興味があります。なぜなら、使用するはずの継承されたコードのためにアクセスする必要がありますが、コード内でさらに呼び出されるからです。私はここで詳しくは触れません。C++:LinuxとWindowsでstd :: stringのエスケープ文字の動作が異なります

主な問題は、スペースを含むパスを渡すと、そのパスを二重引用符で囲む必要があるということです。それらの二重引用符はargv []によって取り除かれてしまうので、それらを追加する必要があります。

だから私は、次のようなものでした:

WINDOWS上で、私は何を期待返し
string buff; 
buff.assign(""); 
for(int i = 0; i < m_argc; i++) 
{ 
    buff.append("\""); 
    buff.append(m_argv[i]); 
    buff.append("\" ");    
} 

、このような何か:

"C:\...\myProg.exe" "-s" "-i" "c:\...\file with spaces.dat". 

私が期待するものです。 Linux上で

、しかし、私はこのような何かを得る:ありがとう:)

\"/.../myProg.exe\" \"-s\" \"-i\" \"/.../file with spaces.dat\" 

任意の処理以降

すべてのヘルプは高く評価され、最大私には全く予想外であり、さらに台無し要求通りに、実例を編集する:

#include <iostream> 
#include <cstdio> 
#include <string.h> 
#include <stdlib.h>  

int main(int argc, char* argv[], char* envp[]) 
{ 
    int nRetCode = 0; 

    std::string buff; 
    buff.assign(""); 

    for(int i = 0; i < argc; i++) 
    { 
     if (i != argc-1) 
     { 
      if (i > 0 && (strcmp(argv[i-1],"-i") == 0 || strcmp(argv[i-1],"-o") == 0)) 
      { 
       buff.append("\""); 
       buff.append(argv[i]); 
       buff.append("\" "); 
      } 
      else 
      { 
       buff.append(argv[i]); 
       buff.append(" "); 
      } 
     } 
     else 
     { 
      if (i > 0 && (strcmp(argv[i-1],"-i") == 0 || strcmp(argv[i-1],"-o") == 0)) 
      { 
       buff.append("\""); 
       buff.append(argv[i]); 
       buff.append("\""); 
      } 
      else 
       buff.append(argv[i]); 
     } 
    } 

    std::cout << "contents of buff: \n" << buff.c_str() << std::endl; 

    return nRetCode; 
} 

I geこの1からの正しい出力をT:デバッガは、文字列の内容を報告し、どれだけPaulMcKenzieとイゴールTandetnikが示唆したように

/.../myProg -s -i "/.../file with spaces" 

が、それはです。

は、Linux OSは、ディレクトリ・パスのための/を使用しています誰も

+4

あなたのプログラムの残り、好ましくは[mcve]を投稿してください。 –

+2

どのようにそれを決定しますか?あなたはデバッガの文字列を見ていますか?これは、異なるデバッガがどのように同じ内容を表現するかの違いにすぎません。 –

+0

例えば、 の 'program.exe arguments with spaces'のような空白の引数を渡すときに、' program.exe '引数にスペース ''を付けて渡すのはなぜですか?なぜあなたはこれをしたくないのですか? –

答えて

1

、助けてくれてありがとう。 Windowsは\を使用します。あなたはそれについて何もできません。

OSは、すべてのパスを、あなたが知っている方法で提供するだけです。

+0

WindowsやLinuxのパスはここで問題になりません – Duppy

関連する問題