2012-05-16 4 views
4

execv() 함수는 NULL 종료 문자열의 배열을 필요로하지만 인수의 개수는 취하지 않습니다. 어레이가 끝나는시기를 결정하기 위해 센티널 값 (NULL 포인터)을 사용합니다.main에서 execv로 argv를 전달할 수 있습니까?

execv() 상태에 대한 매뉴얼 페이지 ...

첫 번째 인수, 관례, 파일이 실행되는과 관련된 파일 이름 를 가리켜 야합니다. 포인터 배열은 이 NULL 포인터로 끝나야합니다. 그래서 내 질문은

... ...

나는 execv()main()에서 argv을 전달하려는.

메인에 들어있는 argv가 NULL 포인터로 종료된다는 것을 확신 할 수 있습니까? 즉, argv[argc] == NULL임을 확신 할 수 있습니까? 또는 argc +1 크기의 배열 char*을 할당해야하고 색인에 NULL을 넣어야합니까?

내가 보증 할 수 있으면 어딘가에 문서화되어 있습니까?

감사합니다, ~ 에릭

답변

7

예. argv 벡터는 항상 NULL 종료됩니다.

초안 C99 표준 상태 : 그들이 선언하는 경우

에서, main 함수의 매개 변수는 다음과 제약에 따르는 것이다는 :

  • argc의 값은 음수가되어야한다.
  • argv[argc]은 널 포인터 여야합니다.
+3

원본을 인용 할 수 있습니까? –

+5

@ ErnestFriedman-Hill 표준 5.1.2.2.1 섹션 (예 : http : //c0x.coding-guidelines.com/5.1.2.2.1.html 참조) –

+0

완벽한, 감사합니다! –