inflearn logo
강의

講義

知識共有

ホン・ジョンモのついていきながら学ぶC言語

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

488

Wonder

投稿した質問数 3

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 반환

}

 

 

strcat() c 11.6강

回答 2

0

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

sohyun

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

0

sohyun

안녕하세요!

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

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

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

완전히 똑같이 따라해도 exe파일이 안만들어져서 실행이 안됩니다.

1

49

3

main 함수에서 왜 int만 선언이 되는걸까요

1

54

2

8비트 2진수 변환시 왜 1을 더해야하나요?

1

53

2

혹시 강의를 빠르게 수강하려면 어디서부터 듣는게 좋을까요?

1

46

1

프로토타입과 함수간의 인자 불일치

1

72

2

12.12 헤더 관련 질문

1

59

2

Visual Studio Community 2026 사용 문의

1

135

2

Q. 15:30, 부호가 있는 8비트 정수 질문

1

59

2

getchar(), putchar()

1

92

3

강의자리ㅛ

1

78

2

비주얼스튜디오코드로 공부해도 상관없나요?

1

112

2

소스파일안에 여러 파일

1

74

2

F5와 F7의 차이

1

75

2

c = TWO * (a+b); 에서 a와 b는?

1

58

2

; 세미콜론을 붙이는 기준에 문의

1

68

1

Step over 기능 문의

1

52

2

2.6 강의 따옴표 출력 규칙 문의

1

74

2

int main 함수 관련 오류 문의

1

67

2

13.4 words[0]

0

60

2

11.7 함수를 구현해 봤습니다.

1

62

2

11.6 직접 strcmp와 strncmp를 구현해 보았습니다.

1

64

2

11.6 my_strcat과 my_strncat을 구현해봤습니다.

1

53

2

11.6 fit_str함수를 구현해 봤습니다.

1

53

2

11.5 코드 구현

1

67

2