인프런 커뮤니티 질문&답변

Wonder님의 프로필 이미지
Wonder

작성한 질문수

홍정모의 따라하며 배우는 C언어

11.6 강 strcat() 구현 중 질문이 있습니다.

작성

·

422

0

- 학습 관련 질문을 남겨주세요. 상세히 작성하면 더 좋아요!
- 먼저 유사한 질문이 있었는지 검색해보세요.
- 서로 예의를 지키며 존중하는 문화를 만들어가요.
- 잠깐! 인프런 서비스 운영 관련 문의는 1:1 문의하기를 이용해주세요.

안녕하세요, 11.6강 strcat() 함수 구현 중 질문드립니다.

char * strcat_ptr(char* dest, const char* src) // strcat 구현하기

{

char* temp = dest;   // temp 포인터 주소를 dest 로

 

while (*temp)  // temp가 가르키는 문자가 null 일때까지 반복

*질문사항 : *temp 를 *dest 로 바꾸면 무한루프가 되더라구요..ㅠㅠ 왜 그런지 모르겠어요..

 

{

temp++;  // temp 주소 하나씩 증가

}

while (*src)  // src가 가르키는 문자가 null 일때까지 반복

{

*temp++ = *src++;   // temp가 가르키는 주소에 src가 가르키는 문자로 변경

}

temp = 0x00;  // temp를 null 로 해줌.

return dest;  //dest 반환

}

 

 

답변 2

0

Wonder님의 프로필 이미지
Wonder
질문자

안녕하세요 조교님!!

강의 중에서 교수님께서 strcat() 을 직접 구현해보라고 하셔서,

구글링 + 친구의 조언으로 코드를 받아, 이해하던 중 어려움을 겪어 질문을 드렸었는데...

-> 실수였습니다.. ㅠㅠ 해결되었어요.

그래도 혹시 다른 수강생이 위 코드를 보고 궁금해 할 수도 있기에 복습 겸, 아래에 자세하게 설명 남겼어요!

 

#include <stdio.h>

/*

11.6 강 strcat() 설명 중, 교수님께서 strcat() 을 직접 구현해보라고하셔서 구글링을 동원하여... 구현해보았습니다!

 

구현 기능 :src 문자열을 dest 문자열의 끝에 붙여넣는 것

(1) dest, src 각각 문자열의 시작 주소를 매개변수로 받자.

(2) dest의 끝('\0' 이 저장된 주소)을 찾자.

(2-1) dest 문자열의 시작주소를 임시로 temp 에 저장하자.

(2-2) *temp 는 '\0'을 만나면 false 이므로 

  while(*temp){temp++;} 으로 하여금 dest의 끝 주소를 temp에 저장할 수 있다.

(3) 두번째 루프에서 while(*src){*temp++=*src++;}으로 하여금

src 문자열의 처음부터 *src = '\0' 일때까지 

*src 를 *temp 에 저장한다. temp는 이때 dest의 끝 주소이므로, dest의 끝에 src 문자열이 저장된다.

(4) 임시로 선언한 temp 포인터를 NULL 로 바꿔준 뒤 dest를 return한다.

*/

 

 

char* strcat_ptr(char* dest, const char* src) // (1) dest, src 각각 문자열의 시작 주소를 매개변수로 받자.

{

char* temp = dest; //(2) dest 문자열의 시작주소를 임시로 temp 에 저장하자.

while (*temp) //(2) dest의 끝('\0' 이 저장된 주소)을 찾자.

{ // (2-2) *temp 는 '\0'을 만나면 false 이므로 

temp++; //while(*temp){temp++;} 으로 하여금 dest의 끝 주소를 temp에 저장할 수 있다.

}

while (*src) //(3) 두번째 루프에서 while(*src){*temp++=*src++;}으로 하여금

{ /*src 문자열의 처음부터 *src = '\0' 일때까지 

*src 를 *temp 에 저장한다. temp는 이때 dest의 끝 주소이므로, 

       dest의 끝에 src 문자열이 저장된다.*/

*temp++ = *src++; 

}

temp = 0x00; //(4) 임시로 선언한 temp 포인터를 NULL 로 바꿔준 뒤 dest를 return한다.

return dest;

}

 

int main() 

{

char arr1[100] = "Hi,there!"; //arr1 선언

char arr2[100] = "I'm here!"; //arr2 선언

printf("%s", strcat_ptr(arr1, arr2)); // 직접 구현한 strcat_ptr을 이용하여 arr2를 arr1 끝에 복사.

return 0;

}

----------------------

앗 다행이네용 ㅎㅎ 정보 공유 감사드립니다 

0

안녕하세요!

강의에서는 해당 코드를 못 찾겠는데 직접 구현하신 코드인건가요?

while(*temp) 이 부분만 dest 로 바꿨을 때를 말씀하시는걸까요?

좀 더 구체적인 설명과 main 함수 포함한 전체 코드 부탁드리겠습니다

Wonder님의 프로필 이미지
Wonder

작성한 질문수

질문하기