<div dir="ltr"><div><div><div><div><div><div><div><div><div><div><div><div>Ciao Samuele, <br><br></div>ti consiglio di debuggare usando un debugger (gdb ad esempio), se nella tua piattaforma non è disponibile è meglio che prima ti adatti il programma per compilare ed eseguire sul tuo PC.<br><br></div>Ciò detto, direi che quest'istruzioni va bene:<br>BufferDati = &BufferLog[20];<br><br></div>Ma forse è più leggibile e facile da manutenere:<br>BufferDati = BufferLog+ 20;<br><br></div>Infine, l'istruzione incriminata:<br>printf("Buffer: %30.30s\n", BufferDati);<br><br></div>Quello che fa è formattare la stringa null-terminated che inizia dove punta BufferDati:<br></div>- identandola a destra;<br></div>- paddandola di spazi;<br></div>- incolonnandola in uno spazio di come minimo di 30 caratteri;<br></div>- troncandola a 30 se la stringa è più lunga di 30 caratteri.<br><br></div>Non mi è ben chiaro cosa volevi verificare, ma se hai dubbi sulla stringa di formattazione del comando printf, è meglio che prima lo provi con l'istruzione da shell "printf":<br></div>printf "Buffer: %30.30s\n" "1;T"<br><br></div>In sostanza i 27 spazi che vedi in più sono causati dal comando printf e non sono contenuti in BufferLog.<br><div><div><div><div><div><div><div><div><div><br></div><div>Ciao,<br></div><div>Andrea<br></div><div><div><div><div><div><br></div></div></div></div></div></div></div></div></div></div></div></div></div></div><div class="gmail_extra"><br><div class="gmail_quote">Il giorno 7 luglio 2016 17:05, Samuele via montellug <span dir="ltr"><<a href="mailto:montellug@montellug.it" target="_blank">montellug@montellug.it</a>></span> ha scritto:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">Per risparmiare un po' di ram su un programma che gira su un micro, ho deciso di fare una acrobazia.<br>
<br>
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.<br>
Quindi pensavo di usare un'unica variabile, con un po' di spazio all'inizio per aggiungere in un secondo momento la data ora.<br>
<br>
Quindi dichiaro:<br>
<br>
char BufferLog[276];<br>
char *BufferDati;<br>
<br>
//Dico che BufferDati, punta 20 byte dopo l'inizio di BufferLog (almeno credo).<br>
<br>
BufferDati = &BufferLog[20];<br>
ByteRicevuti = SocketDati.receiveFrom(Client, BufferDati, ByteDaRicevere);<br>
printf("Buffer: %30.30s\n", BufferDati);<br>
ScritturaLogRete(BufferLog, ByteRicevuti + 20);<br>
<br>
void ScritturaLogRete(char *Dati, int ByteDaTrasmettere)<br>
{<br>
  time_t Secondi = time(NULL);<br>
  strftime(Dati, 20, "%Y%m%d%H%M%S000;A;", localtime(&Secondi));<br>
<br>
  printf("BufferLog: %30.30s\n", Dati);<br>
  SocketLog.sendTo(Client, Dati, ByteDaTrasmettere);<br>
}<br>
<br>
In esecuzione ottengo:<br>
<br>
Buffer:                            1;T<br>
BufferLog:        20160404131824000;A;1;T<br>
<br>
Buffer ha 20 spazi all'inizio. Perché?!?!<br>
La data ora sbagliata è dovuto all'orologio del micro non regolato.<br>
<br>
<br>
_______________________________________________<br>
montellug mailing list<br>
<a href="mailto:montellug@montellug.it" target="_blank">montellug@montellug.it</a><br>
<a href="http://mail.montellug.it/mailman/listinfo/montellug" rel="noreferrer" target="_blank">http://mail.montellug.it/mailman/listinfo/montellug</a><br>
</blockquote></div><br><br clear="all"><br>-- <br><div class="gmail_signature" data-smartmail="gmail_signature">Andrea Della Regina - <a href="mailto:manichen@gmail.com" target="_blank">manichen@gmail.com</a><br>"Fonder des bibliothèques, c'était encore construire des greniers publics, amasser des réserves contre un hiver de l'esprit, qu'à certains signes, malgré moi, je vois venir." M. Yourcenar, Mémoires d'Hadrien</div>
</div>