Stavo cercando di emettere un array di caratteri terminato non nullo in un file.C++ output di array di char terminato non nullo
La cosa reale è che sto ricevendo pacchetti e poi stampo i loro campi.
Ora come questi campi non sono terminati con null, ad esempio, un segmento di dati che ha una dimensione di 512 ma può o non può essere completamente occupato.
Quando scrivo questi dati su un file sto usando la semplice funzione sovraccaricata < < che non sa nulla dei dati reali e cerca solo la conclusione del segmento di dati.
Quindi, come posso dire alla funzione di output di scrivere solo questo numero specifico di byte?
Invece di usare qualcosa di simile, che è costoso di chiamare ogni volta:
enter code here
bytescopied = strncpy(dest, src, maxbytes);
if (bytescopied < 0) { // indicates no bytes copied, parameter error
throw(fit); // error handler stuff here
} else if (bytescopied == maxbytes) {
dest[maxbytes-1] = '\0'; // force null terminator
}
Nella seconda chiamata, l'intero secondo parametro è solo un modo indiretto di chiamare il vecchio 'strlen'. Ma in tal caso, potresti anche usare il modo più idiomatico per l'intera istruzione: 'stream << buffer'. –
N. strlen non si fermerà dopo max. –
'strnlen' sarà. Una chiamata strnlen apparirà molto più pulita: 'strnlen (buffer, maxbytes)'. Non c'e 'niente da fare con i puntatori o qualcosa di simile. – gnud