>char* a = "ABC";
>strcpy (a, "ABCDEF"

; /* No memory allocated for such long string - Error*/
Actually, the error here is that writing anything into a results in undefined behavior.
So, doing this would also be an error:
char *a="ABC";
strcpy(a,"ABC"

;
a points to a string literal that was possibly stored in read-only memory. It's analogous to doing this:
strcpy("ABC","ABC"

;
On the other hand, if a were declared as an array, writing into it would be Ok, providing that you didn't write too many characters:
char a[]="ABC";
strcpy(a,"abc"

; /* ok */
strcpy(a,"abcdefgh"

; /* not ok, string too long */
Russ
bobbitts@hotmail.com