Bonjour à tous,
Est-ce que la longueur d’une string est limitée à un certain nombre de caractère ? Si oui quelle est la limite ? Y a-t-il un moyen de résoudre ce problème ?
Bonjour à tous,
Est-ce que la longueur d’une string est limitée à un certain nombre de caractère ? Si oui quelle est la limite ? Y a-t-il un moyen de résoudre ce problème ?
Gao,
Ça peut aller - au moins - jusqu'à 2^31 (ou 32 ?) caractères. Si tu atteins cette limite, c'est que tu as un problème de conception.
Si les cons volaient, il ferait nuit à midi.
La méthode max_size renvoie le nombre de caractère maximum. Chez moi ça fait à vue de nez 2^32 caractères, soit largement suffisant pour une chaîne de caractères...
Salut,
En fait, je me méfie des valeurs figées données, car elles sont toujours susceptibles d'être différentes selon les systèmes
C'est pourquoi, je préfère dire que le nombre maximum de caractères qu'une chaine peut recevoir (car c'est ce dont il est question ici) est la valeur maximale représentable par size_t.
Size_t n'est, en réalité, qu'un alias du type adapté permettant de représenter l'ensemble des adresses mémoire accessibles sur le système envisagé.
Mais comme nous sommes dans une période "transitoire" (au niveau des PC, du moins) dans laquelle on trouve des systèmes capables de représenter des adresses mémoires sur 32 bits et d'autres capables de le faire sur 64bits, on peut décemment estimer que deux valeurs sont possibles, selon le système et les options de compilation utilisés:
La valeur maximale sera donc de 2^32 -1 (hé oui, à 2^32, on retourne à 0, quand on travaille sur 32 bits ) en 32 bits et de... 2^64-1 (même cause, mêmes effets ) quand on travaille en 64 bits.
Evidemment, s'il venait à exister des systèmes différents (16, 24 ou, pourquoi pas, 151 bits ), la valeur serait adaptée à chaque fois
Est-il besoin de préciser que cette limite reste, malgré tout, théorique car il faut considérer qu'une application ne fonctionne jamais seule (ce qui implique qu'une partie de la mémoire ne sera pas accessible de manière contigüe), et que le système subit lui-même certaines restrictions matérielles (même si on place une partie de la chaine de caractères sur le disque dur et une autre en mémoire, on sera limité à... la taille maximale du disque dur + la quantité de mémoire disponible )
A méditer: La solution la plus simple est toujours la moins compliquée
Ce qui se conçoit bien s'énonce clairement, et les mots pour le dire vous viennent aisément. Nicolas Boileau
Compiler Gcc sous windows avec MinGW
Coder efficacement en C++ : dans les bacs le 17 février 2014
mon tout nouveau blog
Bonjour,
D'accord avec Droggo.
Ce n'est pas un problème à résoudre.
Il y a aussi l'utilisation des flux. Il me parait illusoire de vouloir stoker, gérer, traiter une chaine "énorme".
Un faux problème ne peut pas être résolu
Tout à fait d'accord
Quand la limite maximale est atteinte, c'est, très clairement, du à... des limites propres au système, qui ne peuvent donc pas être contournées.
Au mieux, il est parfois possible de contourner le problème lorsque la taille de la chaine de caractères est (largement ) inférieure à la limite du système, en essayant de libérer les ressources devenues inutiles.
Mais l'exercice est à la fois difficile (peu évident à mettre en œuvre) et périlleux (on risque, à vouloir libérer trop de ressources, en arriver à libérer des ressources nécessaires), pour un résultat qui n'est, malgré tout, pas garanti (on n'a jamais la certitude que nous arriverons à libérer assez de mémoire)
A méditer: La solution la plus simple est toujours la moins compliquée
Ce qui se conçoit bien s'énonce clairement, et les mots pour le dire vous viennent aisément. Nicolas Boileau
Compiler Gcc sous windows avec MinGW
Coder efficacement en C++ : dans les bacs le 17 février 2014
mon tout nouveau blog
Merci pour votre aide, en fait c’était un problème de conception, mea culpa.
Vous avez un bloqueur de publicités installé.
Le Club Developpez.com n'affiche que des publicités IT, discrètes et non intrusives.
Afin que nous puissions continuer à vous fournir gratuitement du contenu de qualité, merci de nous soutenir en désactivant votre bloqueur de publicités sur Developpez.com.
Partager