I don't know about CCS but in normal C you can have an array of strings that is automagically allocated and initialized by the processor like so: char *strings[] = { "bananas", "ananas", "foo", NULL }; Depending on the compiler implementation this can make an array of [4][8] chars, thus wasting a lot of them. You can do this if your strings are (nearly) the same length. You can also use an external tool to compile a list of strings efficiently and generate a vector of pointers into it. This has the advantage of being capable to merge tail-overlapping strings (bananas and ananas above could share the same address space). The input to your tool is a list of strings with a key each (or the key is the position in the list, so it can be missing) like: 0 "bananas" 1 "ananas" 2 "foo" and the output is: /* string 0 made from file ... by toolname */ str_0_0="bananas"; str_0_1=str_0_0+1; str_0_2="foo"; /* string 0 access array made by toolname */ char *str0[3]={ str_0_0, str_0_1, str_0_2 }; to use this for printing you can do: puts(str0[2]); which is what you initially wanted. Note that you can develop using the array of strings method and then later use the tool to compact. I have never used the tool on a PIC I wrote it for a Z80 based project that was very short on EPROM. My tool also mangled the strings for copy protection enhancement but that is another story. I had 256 bytes string space so I had an array of uchar as index cast to char* for use. hope this helps, Peter -- http://www.piclist.com hint: The PICList is archived three different ways. See http://www.piclist.com/#archives for details.