inet_ntoa() 주의사항
**
inet_ntoa() : 네트워크 바이트 순서의 32비트 값을 dotted-decimal notation으로 변환
----------------------------------------------------
#include<sys/socket.h>
#include<netinet/in.h>
#include<arpa/inet.h>
char * inet_ntoa(struct in_addr addr);
----------------------------------------------------
주의해야 할 사항은 리턴 타입이 문자열의 포인터라는 데에 있다.
왜 주의사항이 될까??
문자열의 포인터가 리턴된다는 말은 문자열을 저장한 장소가 어딘가에 존재한다는 의미가 되는데,
그 장소를 우리가 지정해주지 않고 이 함수를 호출한다. 그리고 문자열의 포인터만 얻어내게 된다.
그렇다면 변환된 문자열이 저장된 저장소는 어디?????????
그 장소는 함수 내부에 선언되어 있는 static 버퍼가 된다. C에서 static키워드의 의미는??
ㅋㅋ 따라서 다른 주소정보를 가지고 다시 inet_ntoa() 함수를 호출하게 된다면 버퍼는 다른 데이터로 채워지게 된다.
즉, inet_ntoa() 함수를 중복 사용할 경우에 호출되기 전까지만 리턴되니 포인터가 유효하다.
만약 변경된 문자열 정보를 유지해야 할 경우에는 따로 복사라도 해야 한다..




최근 덧글