Longueur des chaînes : je ne comprend pas bien

Sujets variés concernant le développement en PureBasic
Anonyme2
Messages : 3518
Inscription : jeu. 22/janv./2004 14:31
Localisation : Sourans

Longueur des chaînes : je ne comprend pas bien

Message par Anonyme2 »

Fred,

je ne comprend pas bien comment tu t'y prend pour les string, enfin pour la partie d'allocation de mémoire et ca me cause un problème si je dois utiliser ce buffer pour des API

Si je fais

Code : Tout sélectionner

Chaine = Space(256) 
j'ai bien une chaine de 256 caractères sans le 0 de terminaison.

Maintenant si j'écris après ceci

Code : Tout sélectionner

Chaine = "essai" 
ma chaine fait 5 caractères sans le 0.

Disons qu'à partir de ce moment, je souhaite utiliser Chaine pour une API, que vaut la longueur max utilisable du buffer de cette chaine, 256 ou 5, en clair si j'utilise Chaine dans une boucle avec une API, j'aurais des valeurs différentes et surement des longueurs différentes.

Dois-je redimensionner Chaine à 256 avant de passer son adresse à l'API pour chaque tour de boucle ?
nico
Messages : 3702
Inscription : ven. 13/févr./2004 0:57

Re: Longueur des chaînes : je ne comprend pas bien

Message par nico »

Denis a écrit : Dois-je redimensionner Chaine à 256 avant de passer son adresse à l'API pour chaque tour de boucle ?
Ben oui, mais où est le problème!
Anonyme2
Messages : 3518
Inscription : jeu. 22/janv./2004 14:31
Localisation : Sourans

Message par Anonyme2 »

Je n'en suis pas aussi sur (j'ai comme un gros doute) :roll:

Si tu veux, on peut avoir un buffer défini par allocatememory de 256 caractères et y stocker une chaine d'une longueur de 5 caractères, mais le buffer lui est toujours de 256 caractères utilisables.

Je me demande si Fred réalloue de la mémoire systématiquement ou s'il ne le fait que lorsqu'il doit y en avoir plus.
nico
Messages : 3702
Inscription : ven. 13/févr./2004 0:57

Message par nico »

Denis a écrit : Si tu veux, on peut avoir un buffer défini par allocatememory de 256 caractères et y stocker une chaine d'une longueur de 5 caractères, mais le buffer lui est toujours de 256 caractères utilisables
Non car toutes les commandes(de pure en tout cas) qui gèrent les chaines de caractères inscrivent aussi le caractère 0 de fin de chaine.

Si tu souhaiterais garder toujours la même longueur de chaine, tu serais obligé d'utiliser copymemory.

:)
Anonyme2
Messages : 3518
Inscription : jeu. 22/janv./2004 14:31
Localisation : Sourans

Message par Anonyme2 »

Tu ne m'as pas compris, la longueur d'une chaine est une chose, le buffer ou elle est stockée en est une autre.

Effectivement dans l'esprit de limiter la mémoire utilisée, redimensionner au plus juste semble être la solution, mais bon, j'ai un doute, y' a des jours comme ça :roll:
nico
Messages : 3702
Inscription : ven. 13/févr./2004 0:57

Message par nico »

Excuse moi, je t'ai mal lu, effectivement avec AllocateMemory, on peut se poser la question, mais il ne fait aucun doute que la taille allouée avec cette fonction ne peut varier en aucun cas avec son contenu quel qu'il soit!

D'ailleurs, cela rejoint la même idée que d'utiliser CopyMemory!

Pour ce qui est des variables de type string, elles sont redimensionnées sinon il y aurait un gros problème à moins qu'elles soient déclarées dès le départ à 64ko, alors rassurer?

:)
Fred
Site Admin
Messages : 2808
Inscription : mer. 21/janv./2004 11:03

Message par Fred »

Les strings sont dynamiquement alloués, donc si tu alloues un string de 256 octets avec Space(), il repasse à 5 octets si tu lui affecte une autre chaine de 5 caractères.
Anonyme2
Messages : 3518
Inscription : jeu. 22/janv./2004 14:31
Localisation : Sourans

Message par Anonyme2 »

Ouf, je dormirais moins bête :D

Merci
Répondre