실행 결과
당신의 이름을 입력 해주세요: hwlee
당신의 이름을 입력 해주세요: woojin
Hi, 儆儆儆儆儆儆儆儆뷏??
Hi, 儆儆儆儆儆儆儆儆뷏??
Tip
gets() 함수는 문자열을 입력받아 함수 입력으로 받은 문자들을 차례대로 배열에 저장하는 함수입니다.
Hi, hwlee과 Hi, woojin의 결과를 예상했으나 우리가 의도하지 않는 이상한 값(쓰레기 값)이 나왔습니다. 원인이 무엇일까요?
의도한 것은, WhatIsYourName() 함수를 이용하여 이름을 물어보고 함수 내 name 배열에 저장하여 배열의 주소 값을 main() 함수에 전달합니다. 그러면 main() 함수에서는 주소 값을 전달 받아 WhatIsYourName() 함수의 배열에 접근하고 저장된 값을 출력하고자 하였습니다.
문제는, WhatIsYourName() 함수 내 name 배열에서 이름을 저장했지만, 함수가 끝나면서 이 배열의 메모리를 반환했기 때문입니다. 이름이 저장된 메모리가 반환되었으니 더 이상 이름이 저장되어 있다고 보장할 수가 없게 된 것이지요.
배열이 WhatIsYourName() 함수 안에서 지역적으로 선언되어 있으므로 배열이 선언된 함수를 빠져 나오면 해당 배열 메모리가 소멸됩니다. 함수 안에서 선언되고 함수 안에서만 사용되며 함수가 끝나면 사라지는 지역 변수의 한계라고 할 수 있습니다. 이를 해결하려면 어떻게 해야 할까요?