Allocazione dinamica di una stringa

di il
3 risposte

Allocazione dinamica di una stringa

Ciao. Da poco sto iniziando a scrivere programmi in C e non ho ancora tanta dimestichezza. Vorrei creare un programma che chieda all'utente di inserire un messaggio ma vorrei allocare dinamicamente la stringa che deve contenerlo. Ho pensato di scrivere nel seguente modo:
#include <stdio.h>
#include <stdlib.h>

int main(void)
{
char *stringa,ch;
int n=0,i=0;
printf("inserire messaggio: ");
while((ch=getchar())!= '\n' )
{
n++;
stringa=(char *) malloc(n+1);
stringa[i++]=ch;
}
printf("%s",stringa);
return 0;
}
ma il programma non fa quello che vorrei. Potresti dirmi per piacere dove è l'errore?

3 Risposte

  • Re: Allocazione dinamica di una stringa

    Intanto la malloc non va usata più volte perché allochi sempre memoria diversa.
    In questo modo, allochi tante stringhe

    la prima di 1 carattere
    la seconda di 2 caratteri
    la terza di 3 caratteri ...

    tutte diverse e i vari caratteri in input vanno nelle varie stringhe ...

    Devi usare la funzione realloc per riallocare la stessa stringa dinamicamente.
  • Re: Allocazione dinamica di una stringa

    Ok grazie mille. Ho modificato nel seguente modo ed ora sembra che proceda bene
    int main(void)
    {
    char *stringa,ch;
    int n=0,i=0;
    stringa=(char *) malloc(n+1);
    printf("inserire messaggio: ");
    while((ch=getchar())!= '\n' )
    {
    n++;
    stringa=(char *) realloc(stringa,n+1);
    stringa[i++]=ch;
    }
    stringa='\0';
    printf("%s",stringa);
    return 0;
  • Re: Allocazione dinamica di una stringa

    Puoi migliorare usando solo la realloc nel ciclo a patto di inizializzare il puntatore a NULL

    char *stringa=NULL;
Devi accedere o registrarti per scrivere nel forum
3 risposte