ㅇㅎ 책에는 잘 안 나와있네요 공부해야겠음 ㅇㅇ
그리고 cin으로는 접근이 왜 되는지 모르겠음 - dc App
익명(msk0829)2020-12-10 02:29
아직 객체랑 클래스에 대한 개념을 몰라서 이런 질문이 나올 수도 있음
익명(61.254)2020-12-10 08:16
답글
0. 클래스가 아닌 구조체이기 때문에 main 내에서 직접 구조체 멤버인 문자 배열에 접근하는 것도 당연히 가능함. man.name = "John"; 과 같은 코드가 동작하지 않는 것처럼 보이는 건 단순히 name 문자열이 c-style 문자열, 즉 문자 배열로 문자열을 처리하는 방식이기 때문임. man.name은 배열의 첫 요소에 대한 포인터이고 이 포인터가 가리키는 위치는 바꿀 수 없기 때문에 저런 대입문이 성립하지 않음. 따라서 c-style 문자열에 대입하고 싶다면 위에 갤러 말처럼 strcpy 함수 등을 사용하거나 직접 요소마다 대입해줘야함
익명(61.254)2020-12-10 08:21
답글
1. cin의 내부 구현은 나도 공부가 부족해서인가 잘 모르겠음.. 중요한건 cin에 대해 >> 연산자가 char * 형, std::string 형에 대해 잘 작동하도록 설계되어 있고 프로그래머는 여기에 대해 크게 신경 쓸 필요 없다는 것임. 질문을 보니까 man.name = "John";과 같은 코드는 동작하지 않는데 어째서 cin >> man.name;과 같은 코드는 잘 동작하는지에서 의문이 생긴 것 같은데, 아까 말한 strcpy 함수, 또는 반복문을 통해 배열에 요소를 하나씩 복사하는 과정이 cin에 대해 정의된 >> 연산자에서 '자동으로' 이루어지고 있다고 생각하면 됨.
익명(61.254)2020-12-10 08:25
답글
2. main에서 man.name에 직접 접근하고 싶다면 0번에서 말해줬던 것 처럼, 직접 man.name[0] = 'J'; man.name[1] = 'o'; .... man.name[4] = '\n';과 같이 하나씩 대입하는 과정을 반복문으로 처리하거나, 아니면 cstring 헤더 파일에 정의된 strcpy류의 함수를 이용하면 됨.
1. istream 사용은 메모리 주소가 아니라 버퍼인걸로 앎 - dc App
메모리 구조를 몰라서 이해가 안가네요 - dc App
버퍼 캐시에 대하여 공부하면 되나요? - dc App
구글에 iostream 쳐보셈 - dc App
넵 ㄱㅅㄱㅅ - dc App
문자열 배열이여서 main 함수 안에다 대입 불가능이 뭔소리임?
man.name = "foo" 이런걸 원하는건가
그런걸 원했다면 strcpy 함수를 공부해보자
그 함수를 사용하는 방법밖에 없나요? - dc App
배열말고 std::string 쓰던가
ㅇㅎ 책에는 잘 안 나와있네요 공부해야겠음 ㅇㅇ 그리고 cin으로는 접근이 왜 되는지 모르겠음 - dc App
아직 객체랑 클래스에 대한 개념을 몰라서 이런 질문이 나올 수도 있음
0. 클래스가 아닌 구조체이기 때문에 main 내에서 직접 구조체 멤버인 문자 배열에 접근하는 것도 당연히 가능함. man.name = "John"; 과 같은 코드가 동작하지 않는 것처럼 보이는 건 단순히 name 문자열이 c-style 문자열, 즉 문자 배열로 문자열을 처리하는 방식이기 때문임. man.name은 배열의 첫 요소에 대한 포인터이고 이 포인터가 가리키는 위치는 바꿀 수 없기 때문에 저런 대입문이 성립하지 않음. 따라서 c-style 문자열에 대입하고 싶다면 위에 갤러 말처럼 strcpy 함수 등을 사용하거나 직접 요소마다 대입해줘야함
1. cin의 내부 구현은 나도 공부가 부족해서인가 잘 모르겠음.. 중요한건 cin에 대해 >> 연산자가 char * 형, std::string 형에 대해 잘 작동하도록 설계되어 있고 프로그래머는 여기에 대해 크게 신경 쓸 필요 없다는 것임. 질문을 보니까 man.name = "John";과 같은 코드는 동작하지 않는데 어째서 cin >> man.name;과 같은 코드는 잘 동작하는지에서 의문이 생긴 것 같은데, 아까 말한 strcpy 함수, 또는 반복문을 통해 배열에 요소를 하나씩 복사하는 과정이 cin에 대해 정의된 >> 연산자에서 '자동으로' 이루어지고 있다고 생각하면 됨.
2. main에서 man.name에 직접 접근하고 싶다면 0번에서 말해줬던 것 처럼, 직접 man.name[0] = 'J'; man.name[1] = 'o'; .... man.name[4] = '\n';과 같이 하나씩 대입하는 과정을 반복문으로 처리하거나, 아니면 cstring 헤더 파일에 정의된 strcpy류의 함수를 이용하면 됨.