Mais attention, en c++une chaîne de caractères (ou plus concrète: STL-string) est un C-String est capable de tenir une chaîne de arbitraty longueur - bien sûr que non!
Jetez un oeil à la membre max_size() qui vous donne le nombre maximal de caractères une chaîne de caractères peut contenir. C'est une mise en œuvre réglés par le nombre et peuvent ne pas être transférables entre les différentes plates-formes. Visual Studio donne une valeur d'environ 4gigs pour les cordes, les autres risquent de vous donner uniquement de 64 ko et 64 bits-plates-formes, il peut vous donner quelque chose de vraiment énorme! Elle dépend et bien sûr, normalement, vous allez courir dans une bad_alloc-exception en raison de l'épuisement de la mémoire un long moment avant d'atteindre le 4gig limite...
BTW: max_size() est un membre d'une autre STL-conteneurs! Il vous donnera le nombre maximal d'éléments d'un certain type (pour lequel vous instanciée le conteneur) qui ce conteneur sera (théoriquement) être en mesure de tenir.
Donc, si vous êtes en train de lire à partir d'un fichier de unknow origine, vous devriez:
- Vérifier la taille et assurez-vous qu'il est plus petit que max_size()
- Intercepter et traiter les bad_alloc-exceptions
Et un autre point:
Pourquoi êtes-vous désireux de lecture du fichier en une chaîne de caractères? Je m'attends à d'autres processus en incrémentale de l'analyse ou de quelque chose, non? Donc, au lieu de le lire en une chaîne de caractères peut ainsi lire dans un stringstream (qui est fondamentalement juste quelques sucre syntaxique pour une chaîne de caractères) et de faire le traitement. Mais alors vous pouvez faire le traitement directement à partir du fichier. Parce que si elle est correctement programmé les stringstream pourrait parfaitement être remplacé par un filestream, j'. e. par le fichier lui-même. Ou par tout autre flux d'entrée ainsi, ils partagent tous les mêmes membres et des opérateurs, et peut donc être facilement interchangeables!
Et pour le traitement lui-même: Il y a aussi beaucoup de choses que vous pouvez avoir automatisé par le compilateur! E. g. disons que vous voulez marquer la chaîne. Lors de la définition d'un modèle approprié les actions suivantes:
- Lecture à partir d'un fichier (ou d'une chaîne ou de tout autre flux d'entrée)
- La segmentation du contenu
- de pousser tout trouvé jetons dans une STL-conteneurs
- trier les jetons par ordre alphabétique
- eleminating le double des valeurs
pouvez tous(!!) être réalisée en une seule(!) ligne de C++-code (laissez de côté le modèle lui-même et de la gestion des erreurs)! Il suffit d'un seul appel de la fonction std::copy()! Juste google pour jeton "itérateur" et vous aurez une idée de ce que je veux dire. Donc, ce me semble, pour être encore plus "élégant" que de simplement lire à partir d'un fichier...