sizeof(str)
возвращает размер указателя типа char*
. То, что вы должны сделать, это malloc
размер самой строки:
char * copy = malloc(strlen(str) + 1);
Кроме того, эти строки:
while(*str != '\0'){
*copy = *str;
str++;
copy++;
}
copy = '\0';
можно легко переписать в C, как это :
while(*copy++ = *str++);