Strings

Symbian doesn't use the C char * strings but provides classes that does range checking called descriptors. (an overflow in a char str[n] string is probably the most common mistake that allows an attacker to take control over a system. This is achieved by overwriting the stack frame. So it's nice that Symbian libraries does all the range checking).

There are several classes of the desctiptors. The TDesC is an abstract class which is an ancestor of constant strings. The TDes is a subclass TDesC and adds some functions to modify strings - it is an ancestor of all the modifiable strings. A TBuf<n> is a class that keeps n characters as a part of itself (thrus the T prefix). It is usually used to keep some temporary strings as automatic variables. However because of the small stack in Symbian devices you should not keep too many string on the stack.

TPtr objects stores a pointer to a buffer (with information about the string length and maximum length) which it doesn't own. E.g. a TPtr can point to characters 5 to 10 of a TBuf<64>. Destroying the TPtr will not hurt the data in the TBuf. However if you destory the TBuf, the TPtr will become invalid. A TPtrC is a non-modifiable version of TPtr.

If you want to keep the string on the heap use a HBufC. The HBufC objects cannot be kept on the stack but must be created on the heap like C classes but it also doesn't need a virtual destructor as all the data is inlined like in T classes. That's why is has a special prefix - H. As the C suffix suggests that class is non-modifiable directly but there is a Des() function which returns a TPtr to the data, which will allow you to modify the content.