template < size_t _cap > MyStr ( char ( & szBase )[ _cap ]) : pBase ( szBase ), nCapacity ( _cap ) * ( pBase + nCapacity - 1 ) = 0 ; template < size_t _cap > MyStr ( char ( & szBase )[ _cap ], int , int ) : pBase ( szBase ), nCapacity ( _cap ) * ( pBase + nCapacity - 1 ) = 0 ; MyStr & set ( const char * szRight ) strncpy ( pBase , szRight , nCapacity - 1 ); return * this ; MyStr & operator = ( const char * szRight ) return set ( szRight ); MyStr & operator += ( const char * szRight ) strncat ( pBase , szRight , nCapacity - 1 - strlen ( pBase )); return * this ; private : char * pBase ; size_t nCapacity ; void Test () char strA [ 6 ] = { 0 }, strB [ 4 ] = { 'a' , 'b' , 'c' , 'd' }; MyStr ( strB ) += "zz" ; MyStr ( strA ). set ( "zzeeff" );