2017-02-27 6 views
0

私が作成した以前のプログラムを呼び出すプログラムを作成しています。前のプログラムを実行するために、私はシステムと呼ばれる組み込み関数を使用しています。それは素晴らしいですが、私の引数の1つにスペースを入れてシステムコマンドを実行しようとすると、問題を横断しています。それはそれが別の議論であると考える。スペースを含む引数でシステムコマンドを実行するにはどうすればよいですか?スペースを含む引数でsystemコマンドを実行する方法

オペレーティング・システムに応じて、私の最初の推測ではあるが、コマンドArgumentProgram.exe

引数1 User

引数2 File 1

引数3 Open

Program 1 
int main() 
{ 
    int status = system("ArgumentProgram.exe User1 File 1 Open"); 
    return 0; 
} 

Program 2(ArgumentProgram.exe) 

int main (int argc, char *argv[]) 
{ 
    if (argc != 3) 
    { 
     printf("This executable needs 3 parameters input"); 
     return 0; 
    } 

    printf("User name is :%s\n", argv[0]); 
    printf("File name is :%s\n", argv[1]); 
    printf("Command is :%s\n", argv[2]); 
    return 0; 
} 
+0

これはCプログラミング言語の問題ではなく、あなたのプラットフォームが 'system'コマンドでどのようにコマンドを実行するかです。通常これはシェルです。ドキュメントをお読みください。 – Olaf

答えて

1

を実行します。引数を囲みこのような引用によって:

int status = system("ArgumentProgram.exe User1 \"File 1\" Open"); 
0

これは、またはその間のaditionalシェルプロセスの呼び出しを伴わない場合がありますので、Cでsystemを使用することが常に少し危険です。プログラムと引数を別々に渡す方が安全です。

代替ソリューションは、実行時環境によって異なります。 Windowsの実装とその他の世界の実装については、hereを参照してください。

このようにすれば、標準コンプライアンスが失われ、移植可能なプラットフォームを作成したい場合は、Windows用のバージョンと他のオペレーティングシステム用のバージョンを#ifdefで提供する必要があります。ただし、system(....)を使用している場合でも、プログラムがANSI Cに準拠している範囲でのみポータブルです。 システムによって実行されるシェル、したがってコマンド文字列の解釈は、あなたの環境に依存するので、あなたは本当に移植性がありません。

関連する問題