J'ai un Istream et j'ai besoin de lire exactement une quantité spécifique d'octets, mais je ne connais pas la longueur de celui-ci. Il est résilié null. Je pensais que je pouvais soit 1) écrire une boucle et lire un octet à la fois 2) Dites-lui de me retourner un tampon ou une chaîne qui commence maintenant jusqu'à un certain octet (0 dans ce cas). ou 3) lire dans un buf exactement un octet à la fois et vérifiez-le pour 0 et appendez-le à la chaîne si ce n'est pas. P>
Le 3ème Je sais que je peux faire, mais les deux autres sonnent comme il peut être possible avec Istream (c'est un fichier filtre dans ce cas). Je lis toujours la documentation pour Istream. Theres beaucoup. P>
3 Réponses :
Il ressemble à la surcharge: de http://www.cplusplus.com/reference/iostream/istream/get/ résoudra votre problème; Mettez '\ 0' code> comme
delim code>. Il existe également une version (affichée à http://www.cplusplus.com/reference/string/ getline / ) qui retournera un
std :: string code>. p> p>
Puisque vous ne connaissez pas la longueur, le plus simple serait:
std::string strBuf; std::getline( istream, strBuf, '\0' );
Vous devez réellement utiliser '\ 0' au lieu de 0. Sinon, votre code ne fonctionne pas comme prévu. Il aussi moi un peu pour comprendre ça
@ acidzombie24: Il ne devrait y avoir aucune différence (la valeur ASCII de \ 0 code> est 0) Sauf si vous avez une surcharge pour
getline () code> qui accepte un
int code> en tant que troisième paramètre. Quelle erreur obtenez-vous?
Je suis sûr que cela a à voir avec une surcharge d'int Vs. Voici un exemple CODEPAD.ORG/YRDKVMNS vs votre exemple codépad.org/kwijtaof
@acidzombie: hein, il semble que cela ne puisse pas automatiquement convertir int code> sur
char code>, lequel je suppose est logique dans le cas général car ils sont de différentes tailles. Bon à savoir! Ma théorie sur la surcharge est totalement fausse.
@acidzombie, @cameron: de la "ne fonctionne pas comme prévu", je pensais que cela avait des problèmes au moment de l'exécution. TNX pour la correction.