Why does the API CopyMemory behave in a variant of ways?

Eg

If I want to move a type to a string then I have to use

Code:
    sTemp = Space$(Len(ETU7CallType))
    
    CopyMemory ByVal sTemp, SomeCallType, Len(sTemp)

but if I want to copy a string to a type then I have to use

Code:
CopyMemory guETU7Type, ByVal sTGB, Len(guETU7Type)
I know there are reasons and I would just like to know why - cos I'm fed up of having to reload the project after vb crashes!