Yes, I see the problem.
Let's look at it line by line.
mplayerobj.strPlayerName = "TEST";
mplayerobj.strPlayerName is a STRING pointer. By writing "TEST", you are putting 5 chars somewhere in memory (T, E, S, T, 0). The assignment (=) makes your STRING* (mplayerobj.strPlayerName) point to that memory location. All good so far.
(mplayerdebugtext.txtPlayerName.pstring)[0] = mplayerobj.strPlayerName;
This line copies the memory address from mplayerobj.strPlayerName to
(mplayerdebugtext.txtPlayerName.pstring)[0]. Now both pointers point to the memory address where "TEST" is stored. Still good.
mplayerobj.strPlayerName = "PLAYER NAME";
This is the problem. "PLAYER NAME" is not stored at the same location as "TEST". Now you have mplayerobj.strPlayerName pointing to the memory address where "PLAYER NAME" is stored, and (mplayerdebugtext.txtPlayerName.pstring)[0] still pointing to the memory address where "TEST" is stored.
What you want to do, is not change the memory address strPlayerName points to, but change what is at that address. You can do this with str_cpy. Here is how I'd write this:
Code:
mplayerobj.strPlayerName = str_create("TEST"); // I do this so it is actually a STRING, and not a char[].
(mplayerdebugtext.txtPlayerName.pstring)[0] = mplayerobj.strPlayerName;
str_cpy(mplayerobj.strPlayerName, "PLAYER NAME");
A nice clip about pointers in C:
http://www.youtube.com/watch?v=6pmWojisM_E