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
매개 변수는 envp
POSIX에 의해 지정되지 않고 광범위하게 지원됩니다.
환경 목록에 액세스하는 다른 방법은 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에서 유효합니다.
참고 URL : https://stackoverflow.com/questions/10321435/is-char-envp-as-a-third-argument-to-main-portable
'IT TIP' 카테고리의 다른 글
반복기의 기본값은 무엇입니까? (0) | 2020.12.08 |
---|---|
Executor를 종료하지 않고 ThreadPoolExecutor의 모든 작업이 완료 될 때까지 기다리는 방법은 무엇입니까? (0) | 2020.12.08 |
Laravel 5에서 예외 / 누락 된 페이지를 어떻게 잡나요? (0) | 2020.12.07 |
클래스의 함수 (메소드) 가져 오기 (0) | 2020.12.07 |
Kotlin에 동시성 키워드가없는 이유는 무엇입니까? (0) | 2020.12.07 |