Non riesco a capire il buffer in C

di il
11 risposte

Non riesco a capire il buffer in C

Salve a tutti ho cercato nel forum ma non ho trovato spiegazioni valide, non riesco a gestire il buffer in C, esiste qualche esercizio per esso? il motivo è che non ben capito come gestirlo, chi è che può spiegarmelo?

quello che so è che è uno spazio di memoria temporaneo usato mentre il programma è aperto e che se lo pieno mi salta le istruzioni ma per il resto

11 Risposte

  • Re: Non riesco a capire il buffer in C

    giammo ha scritto:


    che se lo pieno mi salta le istruzioni ma per il resto
    Eh?

    Comunque prova a leggere una stringa (da tastiera o da file) di 20 caratteri usando un buffer char buf[10];
  • Re: Non riesco a capire il buffer in C

    Ok in quel caso si va nel buffer overflow giusto ? ma questo lo so è riferito solo hai vettori ed alle matrici ?
  • Re: Non riesco a capire il buffer in C

    [B]hai vettori? ai vettori...

    A parte l'italiano non si è capito cosa vuoi.

    Forse se posti del codice che presenta il problema magari si capisce
  • Re: Non riesco a capire il buffer in C

    Un buffer generico (non dovrebbe essere complicato), o come viene gestito un buffer specifico come quello della tastiera?
  • Re: Non riesco a capire il buffer in C

    Si esatto quello da tastiera! Come viene gestito?
  • Re: Non riesco a capire il buffer in C

    È una domanda che ha poco senso. Esistono funzioni bufferizzate e altre no. Ma te lo chiedo di nuovo ... il tuo problema qual è?
  • Re: Non riesco a capire il buffer in C

    Dici che hai letto ma non capisci. Scrivere del codice semplice è la via giusta per assimilare.
    Posta il codice che ha dei comportamenti anomali e ti aiuteremo.
    Non devi provare su codici elaborati, resta sul minimale.
  • Re: Non riesco a capire il buffer in C

    Spesso mi salta l'istruzione gets();

    mettendo per esempio:
    
    puts("immetti testo:");
    gets(testo);
    
    mi salta l'istruzione gets() a volte risolvo facendo cosi:
    
    puts("immetti testo:");
    gets(testo);
    gets(testo);
    
    mettendone due in serie salta la prima ma prende la seconda il codice in questione è il seguente:
    
    void nuovo_item(FILE *fptr){
        struct hard a={0,"",0,0};
        int posizione;
        puts("scegli posizione: ");
        scanf("%d",&posizione);
        fseek(fptr,(posizione - 1) * sizeof(struct hard),SEEK_SET);
        fread(&a,sizeof(struct hard),1,fptr);
        if(a.pos != 0){
            printf("Posizione gia occupata\n");
        }
        else{
            printf("Inserisci Nome attrezzo: ");
            gets(a.nome_att);
            gets(a.nome_att);
            printf("Inserisci quantità: ");
            scanf("%d",&a.quant);
            printf("Inserisci Prezzo: ");
            scanf("%d",&a.costo);
            a.pos = posizione;
            printf("Hai inserito:%d) %s   quantita:%d   Costo:%d\n\n",a.pos,a.nome_att,a.quant,a.costo);
            fseek(fptr,(posizione - 1) * sizeof(struct hard),SEEK_SET);
            a.costo = a.costo * a.quant;
            fwrite(&a,sizeof(struct hard),1,fptr);
        }
    }
    
    che è una funzione che aggiunge la descrizione di un attrezzo ad un file
  • Re: Non riesco a capire il buffer in C

    E' già stato trattato il tuo problema:
    https://www.iprogrammatori.it/forum-programmazione/cplusplus/problema-con-gets-t44977.html
  • Re: Non riesco a capire il buffer in C

    Il problema lo puoi ridurre all'interazione tra queste due chiamate

    scanf("%d",&posizione);

    gets(a.nome_att);

    In questo caso, il carattere \n (ritorno a capo) usato con la scanf non viene memorizzato da nessuna parte (in posizione va solo il numero) e quindi resta nel buffer e viene usato dalla gets che lo ritiene valido.

    In questo caso, dovresti eliminare dal buffer il \n con la prima scanf con

    scanf("%d*%c",&posizione);



    P.S. Meglio usare la fgets al posto della gets
  • Re: Non riesco a capire il buffer in C

    Grazie mille ora ho capito
Devi accedere o registrarti per scrivere nel forum
11 risposte