Visualizzazione dei risultati da 1 a 4 su 4
  1. #1
    Utente di HTML.it
    Registrato dal
    Aug 2001
    Messaggi
    156

    [c] ripulire buffer char allocato con malloc (risolto)

    salve,
    ho questo pezzo di codice
    codice:
    #include ...
    #define ...
    int main()
    {
      [...]
      char *buffer = (char*) malloc(BUFSIZE);
      // apro una socket TCP
      [...]
      while(1)
      { //salvo lo stream TCP in arrivo in buffer
        recv(new_sd, buffer, bufsize, 0);
        printf("%s\n",buffer);
      }
    }
    Il problema di questa cosa è che in buffer mi rimangono caratteri di stringhe più lunghe di quella che vado a visalizzare, faccio un esempio; se ricevo prima "Ciao, prova!" e dopo "Ciao"; la prima printf mi restituisce "Ciao, prova!" e la seconda pure perchè printf non trova "\0" subito dopo "Ciao".
    Come si può azzerare il buffer dopo ogni lettura?

    Grazie mille,
    maxa
    Matteo

  2. #2
    Moderatore di Sicurezza informatica e virus L'avatar di Habanero
    Registrato dal
    Jun 2001
    Messaggi
    9,782
    inserendo manualmente lo /0 alla fine della stringa... ciò è possibile in quanto conosci il numero di caratteri ricevuti.

    codice:
    nr=recv(new_sd, buffer, bufsize, 0);
    buffer[nr]=0;
    printf("%s\n",buffer);
    Leggi il REGOLAMENTO!

    E' molto complicato, un mucchio di input e output, una quantità di informazioni, un mucchio di elementi da considerare, ho una quantità di elementi da tener presente...
    Drugo

  3. #3
    Utente di HTML.it
    Registrato dal
    Aug 2001
    Messaggi
    156
    grazie mille; risolto.

    Mi ero dimenticato del valore ritornato dalla recv
    Matteo

  4. #4
    Utente di HTML.it L'avatar di ibykos
    Registrato dal
    Feb 2005
    Messaggi
    201
    Esistono delle funzioni molto usate che servono a gestire i buffer binari:

    #include <string.h>

    memset (void * buffer,int carattere, size_t dimensione)
    memcpy (void * , void *)
    memcmp (void * , void*)

    Nel tuo caso potresti usare la memset per inizializzare il buffer a zero prima di ogni utilizzo.
    Ciao!

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.