보통 정해지지 않은 크기의 문자열을 저장할 때는 

1차원 메모리를 동적으로 할당 받아 사용합니다. 


이 메모리는 1차원 배열처럼 사용할 수 있지요.

다만, 할당받은 메모리의 위치를 벗어난 곳을 사용하면,

access 위반으로 프로그램이 동작하다가 강제 종료됩니다. (Run-time Error)

프로그래밍 하다보면 많이 발생되는 문제입니다. 

당연한 말이지만, 허가된 공간에서만 접근하고 사용해야합니다.


허가된 공간의 시작 주소는 string이며, 끝나는 지점(주소)은 string + STR_NUM입니다.

다만, 사용할 크기만큼 문자열을 넣어 사용하고 마지막 위치에 NULL을 넣어서

그 끝을 알릴 수 있습니다.


NULL 

 

 

다음처럼 5개의 공간을 할당 받더라도, 두개만 쓰고 3번째에 NULL을 넣어, 그 끝을 알릴 수 있습니다.





이젠

2차원 배열형태로 메모리 할당을 받은 경우를 설명하려 합니다


아래와 같이 1열엔 seoul, 2열엔 olympic, 3열엔 korea가 있고, 마지막열에 NULL로 그 끝을 알리려 합니다.

또한 각 행마다의 단어의 끝을 알리기 위해 seoul NULL, olympic NULL, korea NULL 로 저장합니다.


s

NULL 

 

 

 o

NULL 

 k

NULL 

 

 

 NULL

 

 

 

 

 

 

 


문자열의 경우 끝에 자동으로 NULL이 붙지만, 마지막 열은 일부로 NULL을 사용합니다. 


이 경우 print_strings함수에 단어의 갯수를 알려주지 않더라도, NULL이란 값이 보이면, 마지막 단어라는 점을 알릴 수 있습니다.

(물론 pring_stirng(char ** strs, int word_num) 이렇게 word_num을 직접 함수에 전달할 수 도 있지만요.)


print_strings함수에서는  NULL이 나오기 전까지 단어 출력을 반복합니다.( while(current[i]) )



다시 정리하면, 포인터의 사용시 마지막엔 NULL을 넣음으로...

허가 받지 않은 공간을 모르고 침범하는 오류를 피할 수 있습니다.


1차원 공간 뿐 만아니라 (문자열의 끝)

2차원 공간에서도, NULL을 사용할 수 있습니다. ( 마지막 단어)





Posted by 고무함지
,