E sono entrambe sbagliate.
Il primo errore è qui (quello che genera il warning).
Solo strnome è un char pointer, l'altro è solo un char.codice:char* strnome, strcognome;
Perché entrambi siano puntatori devi scrivere:
Il secondo errore è che per quei puntatori non allochi spazio, quindil il massimo che ottieni è un bel crash. Alloca memoria sufficiente.codice:char *strnome, *strcognome;
Il terzo errore è quel sizeof(strnome) che al massimo restituisce 4 (la dimensione di un puntatore su piattoforme 32bit).
Quel parametro semmai deve valere: strlen(s->autore->nome).
Qui per altri dettagli:
http://www.cplusplus.com/reference/c...tring/strncpy/