반응형

문자열 정보 -> 네트워크 바이트 순서의 정수(3)

 

 

-

 

-

 

inet_ntoa 함수는 이름에서 알 수 있듯이 네트워크 바이트 순서로 정렬된 정수형 IP주소 정보

 

우리가 쉽게 인식할 수 있도록 문자열 형태로 변환해주는 함수이다.

 

-

 

위 함수는 인자로 전달된 정수 형태의 IP 정보를 참조하여 문자열 형태의 IP 정보로변환해서,

 

변환된 문자열의 주소 값을 반환한다.

 

그런데 이 함수를 호출하는 데 있어서 주의해야 할 점이 있다.

 

그것은 반환형이 char형 포인터라는 사실이다.

 

문자열의 주소 값이 반환된다는 것 이미 문자열이 메모리 공간에 저장되어있다는 뜻이다.

 

그런데 이 함수는 프로그래머에게 메모리 공간의 할당을 요구하지 않는다.

 

대신에 함수 내부적으로 메모리 공간을 할당해서 변환된 문자열 정보를 저장한다.

 

따라서 이 함수 호출 후에는 가급적 문자열 정보를 다른 메모리 공간에 복사해 두는 것이 좋다.

 

또다시 inet_ntoa 함수가 호출되면 전에 저장된 문자열 정보가 지워질 수 있기 때문이다.

 

즉, inet_ntoa 함수 재 호출되기 전까지만 반환된 문자열의 주소 값이 유효하니,

 

오랫동안 문자열 정보를 유지해야 한다면 별도의 메모리 공간에 복사해둬야 한다.

 

좀 더 쉽게 쓰자면, inet_ntoa 함수가 호출되면 프로그래머가 직접 메모리 공간을 할당하는 것이 아니라,

 

inet_ntoa 함수 자체에서 메모리 공간을 할당하므로, 다시 inet_ntoa 함수 호출이 되면

 

inet_ntoa 함수가 만든 메모리에 있던 전 데이터는 지워진다.

 

그러므로 다시 inet_ntoa 함수호출이 되기 전에 한번 다른 메모리 공간에 데이터를 저장해 두고

 

호출해야 한다.

 

아래의 사용 예제를 봐보자.

 

-

 

inet_ntoa.c
0.00MB

 

 

-

 

14번째 줄 : 구조체 변수 addr1에 저장된 IP정보를 전달하면서 inet_ntoa 함수를 호출하고 있다.

 

따라서 IP주소 정보를 담은 문자열의 주소 값이 반환된다.

 

-

 

15번째 줄 : 14번째 줄의 함수 호출로반환된 주소 값을 참조해서 문자열을 복사한다.

 

-

 

18, 19번째 줄 : inet_ntoa 함수가 다시 한번 호출되었다.

 

이로써 14번째 줄에서 반환된 주소 값에는 다른 문자열 정보가 채워진다.

 

이를 19번째 줄에서 출력한다.

 

-

 

20번째 줄 : 15번째 줄에서 문자열을 복사해뒀기 때문에

 

14번째 줄의 함수 호출을 통해서 얻은 문자열을 재 출력할 수 있다.

 

-

 

실행결과

 

 

반응형

+ Recent posts