Se eu posso fazer isso:
char str[10];
gets(str);
Pq não posso fazer isso?
char *str;
gets(str);
Se eu posso fazer isso:
char str[10];
gets(str);
Pq não posso fazer isso?
char *str;
gets(str);
O primeiro código reserva espaço para 10 caracteres.
O segundo não. Só cria um ponteiro selvagem, apontado sabe-se lá para que região da memória.
Além disso, lembre-se do nosso amigo cache de strings literais. Isso aqui também é um erro:
char* str = "Blibloblu";
gets(str); //A área apontada por str é read-only.
Hmm… então o erro está em querer usar uma memória não alocada previamente, né? :?
Pensei que o C pudesse receber minha string, alocá-la e depois apontar meu ponteiro para ela 
Nessas horas a simplicidade do C é mesmo irritante.
Hmm… então o erro está em querer usar uma memória não alocada previamente, né? :?Pensei que o C pudesse receber minha string, alocá-la e depois apontar meu ponteiro para ela
C não faz nada “automaticamente”. Ele é igual àquela americana que recebe você em um intercâmbio para estudantes: só dá a cama e o chuveiro. O resto você tem de se arranjar - você tem de limpar seu quarto e lavar sua roupa, e ai de você se deixar a toalha molhada em cima da cama.
Haha, é isso aí. Só uma observação, cuidado ao usar gets(). Pesquise por fgets().