[MontelLUG] Acrobazie puntatori in C

Samuele samuele.zanin a tiscali.it
Gio 7 Lug 2016 17:05:43 CEST


Per risparmiare un po' di ram su un programma che gira su un micro, ho 
deciso di fare una acrobazia.

Leggo i dati da un socket, poi devo sparare la stessa cosa su un altro, 
con l'aggiunta ad inizio pacchetto di data e ora.
Quindi pensavo di usare un'unica variabile, con un po' di spazio 
all'inizio per aggiungere in un secondo momento la data ora.

Quindi dichiaro:

char BufferLog[276];
char *BufferDati;

//Dico che BufferDati, punta 20 byte dopo l'inizio di BufferLog (almeno 
credo).

BufferDati = &BufferLog[20];
ByteRicevuti = SocketDati.receiveFrom(Client, BufferDati, ByteDaRicevere);
printf("Buffer: %30.30s\n", BufferDati);
ScritturaLogRete(BufferLog, ByteRicevuti + 20);

void ScritturaLogRete(char *Dati, int ByteDaTrasmettere)
{
   time_t Secondi = time(NULL);
   strftime(Dati, 20, "%Y%m%d%H%M%S000;A;", localtime(&Secondi));

   printf("BufferLog: %30.30s\n", Dati);
   SocketLog.sendTo(Client, Dati, ByteDaTrasmettere);
}

In esecuzione ottengo:

Buffer:                            1;T
BufferLog:        20160404131824000;A;1;T

Buffer ha 20 spazi all'inizio. Perché?!?!
La data ora sbagliata è dovuto all'orologio del micro non regolato.




Maggiori informazioni sulla lista montellug