작성
·
153
0
5분 부터 나오는 텍스트 세크먼트 영역에 scanf로 입력 받는 것이 불가 해서
버퍼 배열로 scanf 로 입력 받고, p.fname 에 동적 할당하여
문자열을 복사 해주는 방법을 알려 주셨는데요
이것이 가능 한 이유가 텍스트 세그먼트에 접근 하지 않고 ,
p.fame의 주소를 바꿔서 scanf 값을 입력 받는 것이 맞는 건가요? 그럼 동적할당이 해체 되고 나면 p.fname이 가르 키는 주소는 원래 텍스트 세그먼트를 가르키는 것이 맞나요??
그리고 7분 부터 에제 답을 설명 하는데 구조체메모리가 궁금해서 pst->fname 을 메모리 주소창에 쳐서 들어갔는데
문자열에 잘못된 문자가 있습니다 라고 나오는데
구조체 메모리에 접근 하려면 pst->fname 이렇게 주소창에 넣는것이 맞나요?
제가 제대로 이해한건지 궁금해서 질문 남깁니다.
답변 2
0
문자열은 상수여서 대입연산과 문자열을 바꿀수가 없음
그래서 strcpy 함수를 써야 하는데 , strcpy 함수는 목적지 포인터와 소스 포인터를 값을 넣어야함
소스포인터에 배열을 임시로 사용하여 scanf 함수로 입력 받은 값을 저장 해놓음
목적지 포인터 p.fname 에 동적할당을 요청함
동적 할당을 요청하는 이유는 글자 크기를 알수 없기 때문이고
그러면 텍스트 세그먼트에는 전에 사용 했던
struct namect p = { "Jeong_mo", "Hong" };
"jeong_mo" "Hong"과 새로 입력 받은 문자열도 저장 되어 있는것이 맞는 건가요??
답변이 많은 도움이 되네요 감사합니다
0
안녕하세요?
전체적으로 강의의 내용을 잘못이해하고 계신 것 같군요.
너무 급하게 이해하려 하시지 마시고 차근차근 고민해보세요.
저는 동적할당에 대한 강의를 다시 보시는 것을 권장해드리고 싶네요.
문법적인 부분만이 아니라 동적할당은 무엇을 하는 것인지, strcpy는 무슨 함수인지에 대해서 알아보셨으면 좋겠습니다.
메모리 주소창에 대해서는 Debug모드에서 Debug -> Windows -> Memory 를 말씀하시는 것이 맞다면, 메모리의 주소를 입력하셔야 합니다.