perguntas novato sobre malloc e sizeof

Alguém pode me explicar por que minha chamada para malloc com um tamanho de string de 6 retorna um tamanho de 4 bytes? Na verdade, qualquer argumento inteiro que eu dou malloc eu recebo um sizeof de 4. Em seguida, eu estou tentando copiar duas seqüências de caracteres. Por que minha saída da string copiada (NULL)? A seguir está meu código:

int main()
{
    char * str = "string";
    char * copy = malloc(sizeof(str) + 1);
    printf("bytes allocated for copy: %d\n", sizeof(copy));
    while(*str != '\0'){
        *copy = *str;
        str++;
        copy++;
    }
    copy = '\0';
    printf("%s\n", copy);
}

questionAnswers(8)

yourAnswerToTheQuestion