Se non sai come allocare memoria per una stringa in modo dinamico allora ti conviene usare gets.
Però devi dichiarare l' array di caratteri con una dimensione predefinita.
Altrimenti io dichiaro un puntatore e utilizzo questa funzione:
codice:
char* get_string(FILE *fp)
{
char *ptr;
ptr=(char*)malloc(sizeof(char));
if(ptr==NULL)
{
perror("Errore di lettura/inserimento dei dati\n");
return ptr;
}
int i=1,ci;
if(fp==stdin)
fflush(fp);
else
{
ci=fgetc(fp);
if(ci!='\n')
fseek(fp,-1,SEEK_CUR);
}
ptr[0]='\0';
while(ci!=10&&ci!=EOF)
{
ptr=(char*)realloc(ptr,i*sizeof(char));
if(ptr==NULL)
{
perror("Errore di lettura/inserimento dei dati\n");
return ptr;
}
ci=fgetc(fp);
if(ci!=10)
ptr[i-1]=ci;
else
ptr[i-1]='\0';
i++;
}
return ptr;
Che tra l' altro uso anche per leggere da file.