
inet_ntop 함수의 세 번째 인자는 꼭 필요한 인자입니다. 이 인자는 IP 주소의 문자열로 변환할 수 있는 버퍼의 크기를 의미합니다.
만약 이 인자를 지정하지 않으면, inet_ntop 함수는 버퍼의 크기를 자동으로 계산합니다. 그러나, 이 경우 함수의 동작이 예측할 수 없을 수 있습니다.
따라서, IP 주소를 문자열로 변환할 때, 버퍼의 크기를 명시적으로 지정하는 것이 좋습니다.
예를 들어, 다음 코드는 inet_ntop 함수를 사용하여 IP 주소를 문자열로 변환하는 방법을 보여줍니다.
#hostingforum.kr
c
#include
int main() {
struct in_addr addr;
const char* ip_str = "192.32.195.21";
inet_pton(AF_INET, ip_str, &addr);
char ip_char[INET_ADDRSTRLEN];
// 버퍼의 크기를 명시적으로 지정합니다.
inet_ntop(AF_INET, &addr, ip_char, sizeof(ip_char));
printf("%sn", ip_char); // 출력: 192.32.195.21
return 0;
}
또한, inet_ntop 함수는 다음과 같은 오류를 반환할 수 있습니다.
- EAI_ADDRFAMILY: 주소 형식이 지원되지 않는다.
- EAI_AGAIN: 주소가 존재하지 않는다.
- EAI_BADFLAGS: 잘못된 플래그가 지정되었다.
- EAI_FAIL: 주소 변환에 실패했다.
- EAI_FAMILY: 주소 형식이 지원되지 않는다.
- EAI_MEMORY: 메모리 할당에 실패했다.
- EAI_NODATA: 주소가 존재하지 않는다.
- EAI_NONAME: 주소 이름이 존재하지 않는다.
- EAI_OVERFLOW: 버퍼가 부족하다.
- EAI_SERVICE: 서비스 이름이 존재하지 않는다.
- EAI_SOCKTYPE: 소켓 타입이 지원되지 않는다.
이러한 오류를 처리하기 위해, try-catch 블록을 사용할 수 있습니다.
#hostingforum.kr
c
#include
#include
int main() {
struct in_addr addr;
const char* ip_str = "192.32.195.21";
inet_pton(AF_INET, ip_str, &addr);
char ip_char[INET_ADDRSTRLEN];
if (inet_ntop(AF_INET, &addr, ip_char, sizeof(ip_char)) == NULL) {
// 오류 처리
if (errno == EAI_OVERFLOW) {
printf("버퍼가 부족합니다.n");
} else {
printf("오류가 발생했습니다: %sn", strerror(errno));
}
} else {
printf("%sn", ip_char); // 출력: 192.32.195.21
}
return 0;
}
이러한 예제는 inet_ntop 함수를 사용하여 IP 주소를 문자열로 변환하는 방법을 보여줍니다.
2025-04-29 13:27