2009-05-09 14 views
2

別のexeを呼び出すcプログラムを書きたいと思います。このラッパーのCプログラムは、元のexecを呼び出す前に、何らかの環境変数を設定します。例えば、私はexeファイルがtest.exeと呼ばれ、私はtestwrapper.exe <parameter>としてそれを呼び出したいtestwrapper.exe を書き、内部的にはtest.exe <parameter>Cプログラムargvに二重引用符が含まれていません

を呼び出す必要があります私の問題は、私はtest.exe "c:\program files\input"としてtest.exeを呼び出したときに、 Cは "とエスケープということである持って を言いますパラメータこの問題を引き起こしている、と私はそれを修正するために何ができるのは何

としてパス

+2

あなたはTEST.EXEを呼び出すコード内の行を投稿することができますか? –

+0

コードはどうですか? – dirkgently

答えて

9

引用符は、スペースを引数にできるようになっている例:?。

test.exe "this is an argument with spaces" 

引数に引用符を入れるためには、それらをエスケープ:

test.exe "\"c:\program files\input\"" 

あなたがCプログラム内からこれを呼び出した場合は、あなたが引用符をダブルエスケープする必要があると思います。たとえば:

system("test.exe \"\\\"c:\\program files\\input\\\"\""); 

それはtest.exeを実行するコードのあなたの行を見て、しかし、参考になります。

2
は、彼らの前にバックスラッシュを追加して、引用符をエスケープ

「\また、ディレクトリdeliminatorとしてスラッシュを使用することがあります:その方法/、あなたのバックスラッシュをエスケープする必要はありません(あなたを

必要がありません。

EXECV(ARGV [0]、ARGV):\\)

0

UNIXシステム上にある場合は示唆されているように、その後、sucuriによってEXECV使用。ウィンドウでは、process.hで定義された_execv()を使用します。

0

int型のmain(int型のargc、char型*のARGV [])

{

char *install_dir = 0; 
char perlbin[MAX_PATH]; 
char **new_argv; 
int index = 0; 

setlocale(LC_ALL, ""); 
install_dir = get_install_dir(); 

sprintf(perlbin,"%sbin%cperl.bin",install_dir,sep); 
set_env_variable(install_dir); 

new_argv = malloc(MAX_PATH); 
new_argv[0] = malloc(sizeof(char)*(strlen("perl.bin")+1)); 
strcpy (new_argv[0],"perl.bin"); 
for (index = 1 ; index < argc ; index++) 
{ 
    new_argv[index] = malloc(sizeof(char)*(strlen(argv[index])+1)); 
    strcpy (new_argv[index], argv[index]); 
} 
new_argv[index] = NULL; 

_execv(perlbin,new_argv); 
exit (0); 

}

0

あなたはまた、二重引用符を自分で追加することができます。

(警告:クイックハッキングされ、テストされていない)

char ** quoted_argv = malloc((argc - 1) * sizeof(char *)); 
size_t i; 
for(i = 0; i < argc - 1; i++) 
{ 
    quoted_argv[i] = malloc(strlen(argv[i + 1]) + 3); /* allocate space for \0 and quotes */ 
    sprintf(quoted_argv[i], "\"%s\"", argv[i + 1]); 
} 

/* ... use quoted_argv ... */ 

for(i = 0; i < argc - 1; i++) 
    free(quoted_argv[i]); 
free(quoted_argv); 
関連する問題