I know for some C++ experts this class overload is like a piece of cake but as a beginner we always asked to write this again and again.
My code as following don't have compiler problem but have strange output.

Class String
String (const String& s);
String& append(const String& other);
  void init();
  void ensureSize(size_t size);
  char* m_buffer;
  size_t m_length;
  size_t m_bufSize;
String::String(char *s)

//implement append() function inside the constructor 
String& String::append(const char *other)
 size_t newlen=strlen(other);
 int i=0;
 return *this; 
//implement init() inside constructor(this one i couldn't change)
void String::init()
  m_buffer = NULL;
  m_length = 0;
  m_bufSize = 0;
//overload <<(this one i couldn't change)
ostream& operator<< (ostream& os, const String& s)
  String temp = s;
  // Add null terminator so we can use ostream's char* output operator
  temp.ensureSize(temp.m_length + 1);
  temp.m_buffer[temp.m_length] = 0;
  os << "S(" << temp.m_length << "," << temp.m_bufSize
     << ")[" << temp.m_buffer << "]";
  return os;

Here is my driver:

int main()
 String ditty ("Are you sleeping?\n");

The attachment is my strange output.
I have no idea where is my bug??

You're assuming your buffer is \0 terminated, and it isn't.

Class String;
the "C" of class is capital.
Well, anyways, I really don't know what does ensureSize() do (please provide its defination)
I also don't know about >>

os << "S(" << temp.m_length << "," << temp.m_bufSize
<< ")[" << temp.m_buffer << "]";

Explain me why did you inserted "S( __ ,__) [___]"?

The operator part is what it already there which i couldn't change.

>The operator part is what it already there which i couldn't change.
you mean its the part which is not written by you.
..........and can you show me the ensureSize()?
What about the capitalization of Class. It should not compile