PDA

Visualizza la versione completa : [C] Ripulire buffer char allocato con malloc


Maxa12
25-05-2006, 00:22
salve,
ho questo pezzo di 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

Habanero
25-05-2006, 00:37
inserendo manualmente lo /0 alla fine della stringa... ciò è possibile in quanto conosci il numero di caratteri ricevuti.



nr=recv(new_sd, buffer, bufsize, 0);
buffer[nr]=0;
printf("%s\n",buffer);

Maxa12
25-05-2006, 01:13
grazie mille; risolto.

Mi ero dimenticato del valore ritornato dalla recv :fagiano:

ibykos
25-05-2006, 08:13
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!

Loading