2010-11-24 17 views

risposta

18

perché non utilizzare un std::vector per cominciare:

std::vector<char> buffer(lSize); 
std::fread(&buffer[0], 1, buffer.size(), pFile); 
46
std::vector<char> data(buffer, buffer + size); 

James McNellis risposta è meglio se si può fare così.

+11

Anche se la risposta di James' incoraggia codice migliore, questa è la risposta corretta alla domanda A volte hai semplicemente un carattere * per cominciare. – enobayram

3

Non è possibile eseguire il cast tra un carattere * e un vettore; il cast del puntatore fa sì che il risultato abbia esattamente gli stessi byte dell'ingresso, quindi è generalmente una cattiva idea, a meno che non si stia facendo una manipolazione di bit di basso livello.

Supponendo di voler creare un vettore di caratteri, è possibile creare un nuovo oggetto vettoriale di tipo std::vector<char> (si noti che è necessario fornire il tipo di elementi del vettore) e inizializzarlo dall'array passando l'inizio e puntatori end al costruttore:

std::vector<char> vec(buffer, buffer+lSize); 

noti che il secondo argomento è un "puntatore end", molto comune in C++. È importante sottolineare che è un puntatore al carattere dopo alla fine del buffer, non l'ultimo carattere nel buffer. In altre parole, l'inizio è inclusivo ma la fine è esclusiva.

Un'altra possibilità (dal momento che si tratta di caratteri) è utilizzare un std::string invece. Questo può o non può essere quello che vuoi (a seconda che tu stia pensando al char * come una stringa o una matrice di byte). È possibile costruire nello stesso modo:

std::string str(buffer, buffer+lSize); 

o con un costruttore diverso, prendendo la dimensione come secondo argomento:

std::string str(buffer, lSize); 
Problemi correlati