c++ 간단한 질문입니다.
글쓴이: cjy1126 / 작성시간: 월, 2003/09/29 - 8:40오전
c++ 책에 나오는 간단한 예제입니다.
밑의 소스의 생성자에서
p = new char[l];
이렇게 코딩하면 메모리에 어떤식으로 복사가되나요?
책에는 이렇게 나왔는데... strcpy함수에서 '\n'을 만날때까지 계속 복사하는건가요?
감이 잘안오네요.
#include <iostream> using namespace std; class strtype{ char *p; public: strtype(char *s); strtype(const strtype &a); ~strtype() { delete []p; } char *get() { return p; } }; strtype::strtype(char *s) { int l; l = strlen(s); p = new char[l+1]; if(!p){ cout << "Allocation error\n"; exit(1); } strcpy(p, s); cout << p[l-1] << endl; } strtype::strtype(const strtype &a) { int l; l = strlen(a.p); p = new char[l+1]; if(!p){ cout << "Allocation error\n"; exit(1); } strcpy(p, a.p); } void show(strtype x) { char *s; s = x.get(); cout << s << endl; } int main() { strtype a("Hello"), b("There"); show(a); show(b); getchar(); return 0; }
Forums:
질문하신 내용은 다른 분들이 답글을 달아주시리라 생각하구요.참고하
질문하신 내용은 다른 분들이 답글을 달아주시리라 생각하구요.
참고하시는 책이 아주 오래 전의 것 같습니다. 최신의 C++ 표준에 가까운 책을 구하시기 바랍니다.
코드 자체에 메모리 유출과 구형 C++ 동작을 하는 new 그리고 복사 생성자에서 지켜야할 사항이 빠져있고 이전 핸들값의 해제도 없고, 내부 핸들을 그대로 외부에 노출시키는 문제도 있습니다. 또, 복사 생성자가 있다면 대입연산자도 꼭 필요할 것입니다.
그럼, 이만...
'\n'이 아니고 '\0'아닌가요?
'\n'이 아니고 '\0'아닌가요?
그리고, 그렇게 코딩 하신다면, '\0'이 들어갈 자리가 없겠군요.
문자열 처리함수는 '\n' 아닌가요?
그렇게 알고있거든요.
문자열 처리함수는 기본적으로 '\0' 으로 끝나는 것을 한 단위로
줄단위 처리는 입출력 중 gets, fgets, puts, fputs 뿐입니다.
위 네개 함수에 대해서는 확인해 보시고 사용하세요.
file 처리를 하느냐와 표준입출력을 사용하느냐에 따라 '\n' 과 '\0' 에 미묘한 차이가 있으니까요.
댓글 달기