a pointer is a datatype, like int or char, and all pointers are a standard, system-dependent length. pointers point somewhere.
when you say "copy pointer to string", i beleive what you mean is copy the data pointed to by pointer A, to a string.
when you declare a pointer,
char* str;
then you have an uninitialized datatype. the pointer ''points'' to a random location, like "int i", your pointer contains garbage.
when you say:
str = "asdad"; // same as str = &"asdad"
you set the pointer, now it points somewhere special, a literal string . literal strings for the most part are reserved, or read only, so dont try to write to them.
char* str = "";strcat(str, "Asdasd";
this is an invalid operaton because str points to either a random spot, or to a reserved area. you cannot write to a reserved area, and, you cannot write to a random area, without getting undefined results.
in order to use functions that write to memory pointed to by pointers like str, then BOTH pointers must point to valid memory. otherwise, your making a logic error, and get undefined and often terminal results.