Instead of writing a string class that contains a (char *), why not write a string class with a fixed char array? Of course, it would be repetitive if you had to declare many classes for each string length (Str16, Str32, etc…), but you can use templates instead:
template class FixedStr{public: char m_str[LENGTH]; FixedStr() { memset(this,0, LENGTH);} operator char *() { return m_str; } FixedStr & operator =(const char* rhs) { strncpy(m_str, rhs, LENGTH-1); return *this; }};
With this simple declaration, you can already use the FixedStr class , as in the following code:
void func(){ FixedStr str = {"Hello, world!"}; // If initializer string is too // long, an error is given when compiling cout
Such a string class can be useful if you are trying to access a string in a block of memory, as in this code:
void func2(char * pChar /*of length 32*//*){ FixedStr & str = (FixedStr&)*pChar; str = "I like memory hacking";}
The best use of this string class is probably in structs composed of collections of data where you don't want to bother with arrays of characters:
struct MyStruct{ (data); ... FixedString str;}MyStruct mine;mine.str = "This is mine";