-5
나는 내 자신의 문자열 클래스를 만들고 있지만 strlen()을 사용하는 동안 문자열의 문자를 읽는 데 문제가 있습니다.내 str 클래스의 오류
/****str.h****/
class str
{
private:
char *m_ptr;
unsigned int m_size;
//unsigned int m_capacity;
public:
str();
str (const char *);
str (const str &);
~str(){if (m_size != 0) delete [] m_ptr;};
char *data() {return m_ptr;};
//Sobrecarga de operadors.
str operator=(str);
friend std::ostream& operator<<(std::ostream &, str);
};
C 문자열 상수로 초기화 된 생성자를 사용하여 오류가 발생했습니다.
/****str.cpp****/
//Default constructor.
str :: str()
{
m_ptr = new char [1];
m_ptr[0] = '\0';
m_size = 0;
//m_capacity = 10;
}
str :: str(const char *sm_ptr)
{
m_size = strlen(sm_ptr); //HERE IS WHERE THE ERROR OCCURS.
m_ptr = new char[m_size + 1];
strcpy(m_ptr, sm_ptr); //Copies the C string pointed by source into the array pointed by destination, including the terminating null character
}
//Copy constructor.
str :: str(const str &right)
{
m_ptr = new char [right.m_size];
strcpy (m_ptr, right.m_ptr);
m_size = right.m_size;
}
str str::operator=(str right)
{
if (m_size != 0) delete [] m_ptr;
m_ptr = new char [right.m_size + 1];
strcpy(m_ptr, right.m_ptr);
m_size = right.m_size;
return *this;
}
std::ostream &operator<<(std::ostream &strm, str obj)
{
strm << obj.m_ptr;
return strm;
}
0x0053fdd0 {m_ptr = 0xcccccccc m_size = 3,435,973,836} STR *
스택 오버플로에 오신 것을 환영합니다. [Stack Overflow : How to ask] (http://stackoverflow.com/questions/how-to-ask) 및 [Jon Skeet의 질문 체크리스트] (http://msmvps.com/blogs/jon_skeet/archive/2012)를 읽어보십시오. /11/24/stack-overflow-question-checklist.aspx) 유용한 유용한 답변을 얻을 수있는 좋은 질문을하는 방법을 찾으십시오. –
_ '특히 오류가있는 오류가 발생했습니다 ...'? 질문을 편집하십시오. –