inflearn logo
강의

강의

N
챌린지

챌린지

멘토링

멘토링

N
클립

클립

로드맵

로드맵

지식공유

[C++과 언리얼로 만드는 MMORPG 게임 개발 시리즈] Part1: C++ 프로그래밍 입문

연습문제(문자열)#2 질문있습니다.

해결된 질문

191

티제이

작성한 질문수 5

0

#include <iostream>

using namespace std;

//문제2 문자열 복사 함수

char* StrCpy(char* dest, char* src)

{

int i = 0;

while (src[i] != '\0')

{

dest[i] = src[i];

i++;

}

 

dest[i] = '\0';

 

return dest;

}

int main()

{

const int BUF_SIZE = 100;

 

char a[BUF_SIZE] = "Hello";

char b[BUF_SIZE] = "World";

 

StrCpy(b, a);

cout << b << endl;

}

안녕하세요 강사님

최근 연습문제 풀다가 질문있어서 올리게 되었는데요, 3가지 질문드립니다.

질문1

함수 char* StrCpy(char* dest, char* src) 부분에서 함수 자료형이 char*이면 return을 받을때 &rest가 아닌 그냥 rest받는 이유를 알려주세요. 혼자 계속 고민하다가 도저히 모르겠어요 ㅠㅠ

질문2

함수  char* StrCpy(char* dest, char* src)에서 매개변수가 char* 되어있으면 StrCpy(b, a)가 아닌 StrCpy(&b, &a)로 받아야되는 것아닌가요?

질문3

마지막으로 cout << b << endl;에서 b를 출력하면 b[0]만 출력하는줄 알았는데 나머지 배열 전체값이 출력되는 원리 좀 알려주세요.

 

끝으로 제가 강사님 강의 듣고 많은 도움이 되고 있는데 c++은 사실 이번이 처음이어서 그런지 많은 어려움이 있습니다. 특히 포인터로 들어가면서 더더욱 힘들더라구요ㅜㅜ 포인터 부분 어떻게 극복하면 좋은지 약간의 조언좀 해주시면 감사하겠습니다.

C++

답변 1

0

Rookiss

포인터는 누구한테다 어렵습니다 ㅎㅎㅎ
제 경우 어셈블리 언어를 공부하니 저절로 포인터를 이해하게 되었는데요.
그 전엔 C++ = 포인터 = 코딩 = 극혐 공식이 성립했었고
대학교 때 코딩에 흥미를 못 느끼고 스타2 + 디아3 + 와우만 열심히 한 이유이기도 합니다

질문1) &dest가 아닌 dest를 반환하는 이유

char*는 [주소값을 담는 바구니인데, 주소를 타고 가면 char가 있을 것]이라는 의미라 했죠?
dest 타입 자체가 char* 타입이고 반환할 타입도 char*이기 때문에,
별도로 주소를 추출할 필요 없이 dest 자체가 [주소값]입니다.
&dest를 하게 되면 char** 타입이 되며
char**이란 [주소값을 담는 바구니인데, 주소를 타고 가면 char* 즉 주소값이 있다]는 의미가 됩니다.

질문2) char* dest, char* src에서 매개변수가 char*이니 왜 StrCpy(&b, &a)가 아니냐?

역시 타입을 일치시켜줘야 하는데요.
char a[BUF_SIZE] = "Hello";
char b[BUF_SIZE] = "World";

에서 a, b 즉 [배열의 이름은 곧 배열의 시작 주소이다]라는 법칙에 의해
a, b 는 char* 타입입니다. 따라서 1과 마찬가지로 이미 타입이 일치하기 때문에
&a, &b를 해줄 필요도 해서도 안됩니다. &a, &b는 char**이 되기 때문이죠.

질문3)
cout의 operator<<가 그렇게 overloading 되어 있습니다.
크게 중요한 부분은 아니라 넘어가셔도 됩니다.

0

티제이

[배열의 이름은 곧 배열의 시작 주소이다]라고 하셨는데, 그럼 dest는 &dest[0]으로 바꿔 쓰거나  StrCpy(b, a);는  StrCpy(&b[0], &a[0]); 으로 바꿔써도 되는 건가요? 실제로 둘다 후자로 바꿔쓰고 비주얼 스튜디오로 디버깅해보니 똑같이 'Hello'로 나옵니다.

#include <iostream>
using namespace std;
//문제2 문자열 복사 함수
char* StrCpy(char* dest, char* src)
{
	int i = 0;
	while (src[i] != '\0')
	{

		dest[i] = src[i];
		i++;
	}
	dest[i] = '\0';

	return &dest[0];

}

int main()
{
	const int BUF_SIZE = 100;

	char a[BUF_SIZE] = "Hello";
	char b[BUF_SIZE] = "World";

	StrCpy(&b[0], &a[0]);

	cout << b << endl;
}

0

Rookiss

네 정확히 이해하셨습니다. 실제로 저렇게 쓰는 경우도 있습니다.

0

티제이

감사합니다 ㅠㅠ

visualstudio에서 파일분할관리실습시 설정 문의를 드립니다.

0

560

1

정렬함수 좀 더 확실하게 이해 할 방법이 있을까요?

0

453

1

strcpy() 구현 관련 질문

0

536

1

빌드(망치)를 누르니 이런 오류가 떴습니다. 어떻게 해야 하나요?

0

475

1

클래스 타입의 포인터 질문합니다

0

560

1

입력값을 enum 값에 넣어주는거 이제 막혔나요?

0

503

1

템플릿 특수화 관련 질문

0

390

1

포인터 관련 질문합니다!

0

272

1

Unable to start assembler. Check your settings.

0

849

2

cpu선택

0

549

1

포인터 질문이 있습니다

0

331

1

20:35 에서 구조체 크기에 대한 질문입니다!

0

589

1

iterator 삭제관련

0

415

1

함수 호출을 디스어셈블러로 분석하다가 궁금점이 생겼습니다!

0

316

1

15 분 45초 대 질문

0

317

0

스택 프레임 질문합니다!

2

312

1

오른값 참조 in 게임

0

391

0

동적할당 질문이 있습니다

0

457

1

안녕하세요 메모리에 대해 질문드립니다.

0

312

1

함수객체 의 매개변수

0

366

1

복사생성자

0

439

1

main이나 endl 부분이 주황색으로 표시된건 어떻게 하나요

0

430

1

포인터 실습 강의를 보고 궁금한게 있습니다.

0

359

1

스택 오버플로우

2

801

1