mbartman: Your modification does not make much sense in this context - *a and a[0] are equivalent in C/C++.
Sheefo: Your code is absolutely correct. The reason for the problem is a bug in the lite-C compiler. The line
*a = 'f';
writes an integer into memory, not a char. Therefore the 'f' and three zeros are written, which truncates your string behind the 'f'.
This will be fixed in the next release. Thank you for finding this bug.
Workaround: memset(a,'f',1);