2015-02-03 1 views
1

임의의 인수가있는 함수가 있다고 가정합니다. 예 :C 함수에서 임의의 인수를 관리하는 방법

execl(char *path, char *arg0,...,char *argn, 0) 

기능 정의 : (> = 3) 내가 보내 많은 적절한 인수, 그것이 작동하는 방법 execl()

그래서 상관없이. 이제 arg0, arg1, arg2, argn을 포함하는 문자열 배열이 있다고 가정 해 보겠습니다.

어떻게 임의의 문자열로이 함수를 호출 할 수 있습니까? 즉, I는 문자열 크기 (3)의 배열이 있다면 그때는이 같은 기능을 호출하고자

execl(char *path, char *arg0,char *arg1, char *arg2, 0) 

수단과 I 문자열 사이즈 (4)의 배열이 있다면 그때이

같은 함수를 호출 할
execl(char *path, char *arg0,char *arg1, char *arg2,char *arg4, 0) 

자동 검색 방법이 있습니까? 나는 이런 식으로 뭔가를 할 조건을 사용하고 싶지 않아요 ... (배열 크기 2가 두 개의 인수 함수를 호출하면 배열 크기 3이 3 개의 인수 함수를 호출하면됩니다). 프로세스가 있습니까? 짧은 코드로 설명하십시오.

+0

google on'va_list, va_start, va_end' – Cyclonecode

+0

배열의 크기에 대해 배열과 다른 인수를 전달하지 않는 이유는 무엇입니까? for 루프 또는 while 루프와 같은 함수에서 인수를 처리합니다. – Carlise

답변

4

올바르게 이해하면 단일 함수 내에서 빌드하는 가변 인수 개수의 함수를 호출하는 방법을 묻습니다. 짧은 대답은 할 수 없다는 것입니다. c는 가변적 인 기능을 지원하지만 호출하지 않기 위해서입니다. 의미, 당신은 변수의 수를 받아 들일 수 있지만 다른 건 전달할 수없는 함수를 쓸 수 있습니다 https://en.wikipedia.org/wiki/Variadic_function

참고 : 귀하의 execl() 코드가 단지 당신의 질문을 보여주기위한 것이 었는지 또는 어떻게 당신이 찾고 있었는지 확실하지 않았습니다 가변 인수를 사용하여 exec*() 함수를 사용하십시오. 후자의 경우 문자열 배열을 허용하는 execv()을 확인하십시오.

+0

사실 나는 프로그램과 같은 쉘을 만드는 동안 문제를 발견합니다. 그래서 이것을 제 모범에 포함시킵니다. 당신의 관대 한 답변에 감사드립니다. 그리고 execp() 함수의 리소스를 줄 수 있습니까? 나는 그물을 통해서 또한 "남자 execp"를 시도한다 그러나 그들 중 비 작동하지 않는다. – user3712917

+0

문제 없습니다. FYI - 나는'execv'을 의미했다 - http://linux.die.net/man/3/exec – user590028

+0

큰 감사 ... (y) – user3712917

관련 문제