IT TIP

char * envp []는 main () 휴대용에 대한 세 번째 인수입니다.

itqueen 2020. 12. 8. 20:32
반응형

char * envp []는 main () 휴대용에 대한 세 번째 인수입니다.


C프로그램 에서 환경 변수를 얻으려면 다음을 사용할 수 있습니다.

  • getenv()
  • extern char **environ;

그러나 위에서 언급 한 것 외에 표준의 일부로 간주되는 환경 변수를 얻기 위해 char *envp[]세 번째 인수로 사용 하고 main()있습니까?

#include <stdio.h>

int main(int argc, char *argv[], char *envp[])
{
    while(*envp)
        printf("%s\n",*envp++);
}

char *envp[]휴대용?


이 기능 getenv은 C 표준에 지정된 유일한 기능 입니다. 함수 putenv및 extern environ은 POSIX에 따라 다릅니다.

편집하다

main매개 변수는 envpPOSIX에 의해 지정되지 않고 광범위하게 지원됩니다.

환경 목록에 액세스하는 다른 방법은 main () 함수에 세 번째 인수를 선언하는 것입니다.

int main(int argc, char *argv[], char *envp[])

이 인수는 environ과 동일한 방식으로 처리 할 수 ​​있지만 범위가 main ()에 로컬이라는 차이점이 있습니다. 이 기능은 UNIX 시스템에서 광범위하게 구현되지만 범위 제한 외에도 SUSv3에 지정되어 있지 않으므로 사용을 피해야 합니다 .


휴대용이 아닙니다. *envp[]기존의 UNIX 시스템이며 모든 최신 UNIX 시스템이이를 구현하는 것은 아닙니다.

또한 부수적으로 포인터 탐색을 수행하여 envp에 액세스하여 *argv[]넘칠 수 있지만 안전한 프로그래밍 으로 간주 될 수 있다고 생각하지 않습니다 . 프로세스 메모리 맵을 살펴보면 envp[]바로 위에있는 것을 볼 수 argv[]있습니다.


표준은 두 가지 형식을 설명합니다 main( C99 표준 (pdf)의 5.1.2.2.1 참조 ).

ㅏ) int main(void)

b) int main(int argc, char **argv)또는 동등한

구현에서 다른 형식을 정의 할 수 있습니다 (세 번째 인수를 허용 할 수 있음).

c) 또는 다른 구현 정의 방식으로.


세 번째 인수는 Microsoft C 및 GNU GCC에서 유효합니다.

Visual Studio 2015 : 기본 인수

GNU C 프로그래밍 튜토리얼 : 환경 변수

참고 URL : https://stackoverflow.com/questions/10321435/is-char-envp-as-a-third-argument-to-main-portable

반응형