La questione del puntatore è semplice: essendo *buff un puntatore a char, non occupa nessuna locazione di memoria ma ne punta solo una. Quando provi ad immettere da tastiera una stringa, supponiamo "ciao", tu dovresti occupare uno spazio di 5 byte, ossia 1 byte per c, uno per i, 1 per a, 1 per o e un ultimo per \0, terminatore; il punto è che se non allochi questo spazio in memoria ti sarà impossibile andarci a scrivere dentro una stringa: sarebbe come voler mettere un oggetto in una scatola che non c'è. La "scatola" te la devi "creare". Come? Con l'allocazione dinamica, ossia tramite le funzioni malloc e calloc.Originariamente inviato da the darkness
questo codice mi da "bus error"codice:int main(){ char *buff; scanf("%s", buff); printf("E' stato immesso: %s", buff); return 0; }
buff = (char *)malloc(5);
alloca 5 byte in memoria per la stringa buff. I valori rimangono "sporchi", cioè non vengono inizializzati a 0, cosa che invece succede con
buff = (char *)calloc( 5, sizeof(char) );
che oltre ad allocare 5 byte in memoria per la stringa, inizializza anche tali locazioni a 0.
Fatto questo puoi finalmente immettere da tastiera la stringa con l'istruzione scanf("%s", buff); oppure gets(buff);
Quale delle due funzioni precedenti usare? Puoi usare anche la prima (malloc) perché nel tuo caso non hai bisogno di azzerare le locazioni di memoria.
Sia malloc che calloc sono definite in stdlib.h, se vuoi saperne di più puoi googlare un po'![]()

Rispondi quotando