2010-11-24 6 views

Répondre

18

Pourquoi ne pas utiliser un std::vector pour commencer:

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

réponse James McNellis est mieux si vous pouvez le faire comme ça.

+11

Même si la réponse de James encourage un meilleur code, c'est la bonne réponse À la question. Parfois, vous avez simplement un caractère * pour commencer. – enobayram

3

Vous ne pouvez pas convertir entre un caractère * et un vecteur; Le cast du pointeur fait en sorte que le résultat ait exactement les mêmes octets que l'entrée, donc c'est généralement une mauvaise idée, sauf si vous faites une manipulation de bits de bas niveau. En supposant que vous vouliez construire un vecteur de caractères, vous pouvez créer un nouvel objet vectoriel de type std::vector<char> (notez que vous devez fournir le type des éléments du vecteur), et l'initialiser à partir du tableau en passant le début et pointeurs de fin au constructeur:

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

Notez que le second argument est un « pointeur de la fin », très courant en C++. Surtout, il est un pointeur sur le caractère après la fin du tampon, pas le dernier caractère dans le tampon. En d'autres termes, le début est inclusif mais la fin est exclusive.

Une autre possibilité (car il s'agit de caractères) est d'utiliser un std::string à la place. Cela peut ou peut ne pas être ce que vous voulez (selon que vous envisagez le char * comme une chaîne ou un tableau d'octets). Vous pouvez construire de la même manière:

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

ou avec un constructeur différent, en prenant la taille comme second argument:

std::string str(buffer, lSize); 
Questions connexes