by frag.machine » Wed Mar 16, 2016 7:31 pm
pr_strings is a pool of immutable strings (ex: "You got the ", " left the game with ", "progs/player.mdl", etc), previously declared in QuakeC code and stored at the begin of the progs.dat file, concatenated with a '\0' char as separator between individual strings and "\0\0" as final marker. When the engine loads the progs.dat it reads this chunk of text into pr_strings. Every string reference in QuakeC is actually an integer offset to this pool, and every time you need the actual string (ex: when the QuakeC interpreter executes a bprint() call) the macros at pr_builtins.c I mentioned before returns a char pointer to this pool.
Note that this applies only to immutable strings. Strings built during runtime (ex: ftos()) are stored in pr_str_tmp (or something named like that, can't remember right now).
Regarding the error you are facing: most likely you are not sending correct string values. Specially in the case of the precache lists, which are read exactly from pr_strings. Maybe my explanation above will make things a bit easier to debug now.
I know FrikaC made a cgi-bin version of the quakec interpreter once and wrote part of his website in QuakeC 
(LordHavoc)