Forse è solo la mancanza di caffè, ma sto cercando di creare un std::string
da un array char
con terminazione nullo con una lunghezza massima nota e io no sapere, come farloCopia null char array terminato su std :: string rispettando la lunghezza del buffer
auto s = std::string(buffer, sizeof(buffer));
.. era il mio candidato preferito, ma visto che il C++ le stringhe non sono terminazione null questo comando copierà sizeof(buffer)
byte, indipendentemente da qualsiasi contenuto '\ 0'.
auto s = std::string(buffer);
.. copie da buffer
fino \0
è trovato. Questo è quasi quello che voglio, ma non posso fidarmi del buffer di ricezione, quindi mi piacerebbe fornire una lunghezza massima.
Naturalmente, ora posso integrare strnlen()
così:
auto s = std::string(buffer, strnlen(buffer, sizeof(buffer)));
ma che sembra sporca - attraversa il buffer di due volte e ho a che fare con il C-manufatti come string.h
e strnlen()
(ed è brutto) .
Come faccio nel moderno C++?
È terminato da null o ha lunghezza esattamente di sizeof (buffer), non può essere entrambi allo stesso tempo. –
Non è vero (e sono sorpreso per l'upvote). Un C-buffer fornito a qualsiasi tipo di funzione di scrittura può essere pre-allocato con una dimensione fissa. La sequenza scritta nel buffer può ancora essere terminata con null. – frans
Non è vero se è possibile adattare una stringa N di lunghezza N terminata o più in un buffer di N byte, per alcuni N. Avete un esempio funzionante? –