2015-01-25 1 views
1

execl 문에는 어떤 오류가있을 수 있습니까? 인수에도 불구하고execl이 모든 인수를 캡처하지 않음

argv[1] = -1076146944 
argv[2] = 0 

구성 :

numJoeysStr = 6 
randomNumSeedStr = 7 

execl("/path/to/executable", "numJoeysStr", "randNumSeedStr", (char *)0); 
내가 그것을 실행하려고하면, 수신 실행 파일은 argc 내가 ARGV 내용을 인쇄 할 때, 나는 다음과 같은 얻을 덜 3.보다 불평

FWIW, (char *) 0 대신에 NULL을 시도했습니다. 그것은 차이를 만들지 않았습니다.

크리스 광대 - 젊은 내 가장 큰 문제를 해결하지만, 지금은 두 번 기능에 배치 한 후 다음 얻을 :

argv[1] = -1075725068 
argv[2] = -1075725056 
내가 역 참조 시도

을 수행하여 :

printf("argv[1] = %d\n", *argv[1]); 
printf("argv[2] = %d\n", *argv[2]); 

하기 만받을 수 다음

argv[1] = 110 
argv[2] = 114 

내가 기대하는 경우 :

,536,
argv[1] = 6 
argv[2] = 7 

마지막 문제는 인용 부호없이 execl에 변수를 전달하면 예상 한 숫자가됩니다. 나는 어쨌든 모든 execl 인수 (마지막을 제외하고)가 따옴표 안에 있어야한다는 인상 아래에 있었고 심지어 변수들이었습니다.

+1

왜 문자열 대신 정수로 인수를 인쇄합니까? – immibis

+0

아 맞다! 내가 strtol()을 시도하자 – user1185790

+0

나는 편집하기 전에 그것을 논평했다. 새로운 문제는 원하는 문자가 아닌 첫 번째 문자의 ASCII 값을 인쇄한다는 것입니다. (그리고 네,'strtol'은 숫자의 10 진수 형식을 실제 숫자로 변환합니다.) – immibis

답변

4

"/path/to/executable"두 번을 지정해야합니다. 첫 번째 프로그램은 실행할 프로그램이고 두 번째 프로그램은 새 프로세스의 입니다.

+0

위대한, 감사합니다! argv [1] = -1076376332, argv [2] = -1076376320이되었습니다. 이 인수는 역 참조되어야하는 포인터라고 가정합니다. – user1185790

+0

@ user1185790 실제로. –

+0

좋은 답변입니다. 실제로 프로그램 이름을 두 번 지정할 필요는 없지만 argv [0]으로 프로그램에 전달 될 내용을 넣어야합니다. argv [0]을 변경하여 실행중인 프로그램에 속하게 할 수도 있습니다. 협약은 프로그램 이름을 지정해야하지만 그것은 단지 대회 일뿐입니다. –