PC SOFT

FOROS PROFESIONALES
WINDEVWEBDEV y WINDEV Mobile

Inicio → WINDEV 2025 → Comment sont stockées les chaines dans les structures ?
Comment sont stockées les chaines dans les structures ?
Iniciado por nospam, 04,nov. 2004 17:12 - 2 respuestas
Publicado el 04,noviembre 2004 - 17:12
Bonjour
Voici mon problème :

struc est une structure
b est un booléen
n est un entier
s est une chaîne
FIN
ma_struc est une struc
ma_struc:b=Vrai
ma_struc:n=0x80
ma_struc:s="une chaine de caractères quelconque"

Je sais que Dimension de ma_struc = 12 (4 pour b, 4 pour n, 4 pour s)

Quand je vais voir en mémoire ce que contient la variable ma_struc, j'ai
ceci :

00388D00 : 01 00 00 00 88 80 00 00 00 00 00 00 ...^?......

00388D00 est l'adresse en mémoire
01 00 00 00 est le booléen = Vrai (pourquoi sur 4 octets ?)
88 80 00 00 est l'entier = 0x8088
et pour la chaine, je n'ai que 00 00 00 00

Je cherche un peu dans la mémoire et je retrouve ma chaine à l'adresse
0038F90F

0038F908 00 24 00 77 00 00 00 75 6E 65 20 63 68 61 69 6E .$.w...une chain
0038F918 65 20 64 65 20 63 61 72 61 63 74 E8 72 65 73 20 e de caractères
0038F928 71 75 65 6C 63 6F 6E 71 75 65 00 02 00 8F 00 00 quelconque....

Soit 27655 (0x6C07) octets plus loin que ce a quoi je m'attendais.

Ma question est la suivante :
Comment le programme sait où se trouve la chaine quand j'en ai besoin, et
comment moi je peux le savoir surtout.
Toute info ou piste sera la bienvenue.

Merci.
Publicado el 04,noviembre 2004 - 18:34
Salut

Je ne sais pas trop ce que tu cherches à faire, mais je ne suis pas d'accord avec tes données. Voici le code W-Langage permettant d'afficher le contenu de ta structure en live.

adrs est entier = &ma_struc
unoctet est un entier sur 1 octet
s est chaîne = ""
i est entier

POUR i=0 A 11 // 12 octets
Transfert(&unoctet,adrs + i, 1)
s += NumériqueVersChaine(unoctet, "02X") + "."
FIN
Trace(s) // affiche 01.00.00.00.80.00.00.00.40.B7.91.00.

01.00.00.00
Un booléen est un entier, Vrai = 1

80.00.00.00
Sans commentaire

40.B7.91.00
Sans doute l'adresse de la chaine. A creuser ...

Ciao
http://wdgotcha.atspace.com
Publicado el 04,noviembre 2004 - 19:41
C'est effectivement l'adresse de la chaine, ou plus exactement de 16 octets
avant la chaine.
Merci pour ce code, efficace. Mon débugueur continue néanmoins a m'afficher
des 00 00 00 00 du 8 au 12° octet.
Bizarre.
Mais merci, ça m'aide beaucoup.

"Patrick Biker" <patrick.biker@wdgotcha.atspace.com> a écrit dans le message
de news: 418a508d@news.pcsoft.fr...


Salut

Je ne sais pas trop ce que tu cherches à faire, mais je ne suis pas
d'accord avec tes données. Voici le code W-Langage permettant d'afficher
le contenu de ta structure en live.

adrs est entier = &ma_struc
unoctet est un entier sur 1 octet
s est chaîne = ""
i est entier

POUR i=0 A 11 // 12 octets
Transfert(&unoctet,adrs + i, 1)
s += NumériqueVersChaine(unoctet, "02X") + "."
FIN
Trace(s) // affiche 01.00.00.00.80.00.00.00.40.B7.91.00.

01.00.00.00
Un booléen est un entier, Vrai = 1

80.00.00.00
Sans commentaire

40.B7.91.00
Sans doute l'adresse de la chaine. A creuser ...

Ciao
http://wdgotcha.atspace.com