2009-05-09 4 views
2

다른 exe를 호출하는 c 프로그램을 작성하고 싶습니다. 이 래퍼 C 프로그램은 원래 exec를 호출하기 전에 환경 변수를 설정합니다. 예를 들어 은 내가 EXE가 test.exe라고 나는 testwrapper.exe 내가 testwrapper.exe <parameter>로 전화를 걸 썼다가 있다고 가정하고, 내부적으로 호출해야 test.exe <parameter>C argv에 큰 따옴표가 없습니다.

내 문제는 "나는 호출 할 때 test.exetest.exe "c:\program files\input"로, 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로 슬래시 사용 할 수 있습니다 "\ : 당신의 백 슬래시를 이스케이프 그런 식으로/당신이 필요는 없습니다 (당신을 여전히 당신을 생각 할 수있는 경우 : \\)

0

, sucuri에 의해 제안 후 execv와 사용합니다. 윈도우에서는 process.h에 정의 된 _execv()를 사용합니다.

0

int 주 (int argc, 문자의 *의 변수는 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); 
관련 문제