unit49. 구조체 포인터
, 신 지민님이 작성교재 p.642를 보면, "p1 -> name등의 문자열 멤버는 =(할당 연산자)로 저장할 수 없으므로 strcpy 함수를 사용하면 됩니다."라고 나와있습니다.
왜 문자열 멤버는 =로 저장할 수 없나요?
c언어에는 문자열을 저장하는 자료형이 따로 없기 때문에, 문자열 저장을 위해서는 배열을 선언 후 문자열을 할당하거나, char형 문자열 포인터를 사용하면 되잖아요.이 때, 교재를 보면 구조체 Person의 멤버 name이 char name[20]; 즉, 배열로 선언되있으므로, p1->name = "문자열"; 이렇게 저장하면 안되나요?
Re: unit49. 구조체 포인터
, 도장_ 관리자님이 작성변수 선언과 초기화를 동시에 할 때만 질문한 것처럼 쓸 수 있습니다.
그외 문자열은 메모리 조작이기 때문에 strcpy() 함수를 사용해야 합니다.
파이썬, Java 등은 문법적으로 불편을 제거해서 이용하기 편리하게 만들었을 뿐이고, 내부 동작은 어차피 같습니다. C 언어는 문법적 설탕이 없어서 이런 것까지 내가 전부 다 해야 해? 같은 느낌이죠. 실제 하드웨어가 메모리를 다루는 방식에 가까워서 하드웨어 친화적이라고 합니다.
strcpy()는 메모리 1바이트 1바이트에 문자 1개, 1개를 넣는 것입니다. 다른 언어는 쉽게 포장되어 있을 뿐 내부 동작은 같습니다. 어차피 CPU는 메모리에 접근해서 값을 읽고, 쓰는 것이니 내부 동작은 하나씩 하나씩...