Je suis préoccupé par les débordements de buffer, et j'ai besoin de sortir certains caractères d'une classe dérivée de std :: istream. D'après ce que je comprends, il n'y a aucun moyen de diffuser vers une chaîne std :: directement à partir d'un istream, sans mon propre opérateur. J'ai donc envisagé de diffuser le contenu dans un tableau char, puis de le mettre dans une chaîne std :: string. Voici un exemple simple:Le moyen le plus sûr d'extraire du flux vers le tableau char ou std :: string
char CharArray[1000] = {0};
SomeIStream >> CharArray;
std::string StuffFromStream(CharArray);
Cependant, il semble qu'il n'y ait aucun moyen de savoir que CharArray ne sera pas débordé. Y a-t-il un maximum que l'opérateur d'extraction de flux écrira à chararray? Y at-il un moyen de vérifier combien sera extrait de façon préventive? Est-ce que tout est faux, y a-t-il un moyen qui soit beaucoup mieux que cela?
Édition1 :, J'ai corrigé ma fuite de mémoire. Pas besoin d'appeler supprimer. Je ne peux pas croire que je l'ai fait. Edit2: La suggestion d'utiliser le >> directement dans la chaîne a été suggérée. J'ai tenté cette précédente dans la base de code ce problème est venu et il a échoué. Dire qu'aucune correspondance appropriée pour l'opérateur n'a pu être trouvée. J'ai alors essayé avec un std :: fstream et il a échoué encore. Essayer le code std :: fstream dans un projet minimaliste simple a réussi. Cela me dit que quelque chose d'autre ne va pas avec mon plus gros projet. L'intention originale de cette question n'est plus valide.
Édition3: J'ai résolu ce problème. J'ai essayé de streamer vers une typedef String, que je pensais être en fait et std :: string, mais c'était vraiment une const std :: String. Naturellement, il n'y a pas d'opérateur d'extraction de flux pour écrire sur un objet non-inscriptible, donc cela m'a donné tous les opérateurs listés dans l'en-tête istream (celui dont j'avais besoin était dans l'entête de la chaîne).
Merci aux personnes qui ont souligné ma recherche défectueuse et pointe dans la bonne direction.
J'ai essayé cela, exactement, mais mon compilateur a précisé qu'il n'y avait pas une telle surcharge d'opérateur définie. Je vais vérifier et voir si c'est juste ce problème d'implémentations de flux, ou si tout est istreams. – Sqeaky
J'ai testé cela en utilisant et std :: fstream et il a échoué. Cependant, la lecture en utilisant std :: fstream :: read dans un tableau char, puis passer dans une chaîne a travaillé. J'ai lu ceci et il n'y avait pas là http://www.cplusplus.com/reference/iostream/istream/operator%3E%3E/ mais c'est par ici: http://www.cplusplus.com/reference/string/opérateur% 3E% 3E /. Je me demande pourquoi il n'est pas trouvé par mon test avec le fstream ou quand j'ai essayé avec la classe originale dérivée d'istream. – Sqeaky