• 카테고리

    질문 & 답변
  • 세부 분야

    알고리즘 · 자료구조

  • 해결 여부

    미해결

3강 문자열에 등장하는 코드에 관한 질문입니다.

18.07.07 10:16 작성 조회수 176

1

```/ strdup이 비표준이라 같은 기능을 하는 코드를 main내에 직접 삽입하였습니다. /

include

include

int main() {

int i=0;

char *words[100];

char buf[100];

while(i<4 && scanf("%s", buf)!=EOF) {

char * tmp=(char *)calloc(strlen(buf)+1, sizeof(char)); /* 1 */

if(tmp!=NULL) {

strcpy(tmp, buf);

words[i++]=tmp;

}

}

for(i=0 ; i<4 ; ++i) {

printf("%s\n", words[i]);

/* 2 */

return;

}```

저는 위 코드를 다음과 같이 이해했습니다. 즉,

<tmp 포인터는 블록안에서 선언되었기 때문에 while문을 빠져나오면 words[n]의 각 첫바이트의 메모리 주소를 저장한 tmp안의 주소값은 생성과 소멸을 반복하다 마지막에 자동 소멸되나, 각각의 words[n]에 담긴 문자열은 소멸되지 않는다.

또한, 원하는 결과를 다 얻고 나서 calloc에 의해 생성된 메모리를 만일 소거하고 싶다면,

위 '2' 자리에

for(i=0 ; i<4 ; ++i) {

free(words[i]);

를 삽입하면 된다.>

위와 같이 해석하는 것이 맞는지 확인해 주시면 고맙겠습니다.

덧붙임> 좋은 강의 올려 주셔서 고맙습니다. 남은 파트도 열심히 잘 들을께요^^

답변 0

답변을 작성해보세요.

답변을 기다리고 있는 질문이에요.
첫번째 답변을 남겨보세요!