Probleme de string ...

Ahryman40k Messages postés 14 Date d'inscription mardi 24 juin 2003 Statut Membre Dernière intervention 25 mars 2008 - 17 mars 2008 à 10:31
Ahryman40k Messages postés 14 Date d'inscription mardi 24 juin 2003 Statut Membre Dernière intervention 25 mars 2008 - 17 mars 2008 à 11:40
Bonjour,
j'ai un comportement bizarre à travers du code que je ne maitrise pas et j'aimerai vos avis.

J'ai dans une library à laquelle je suis linké le code suivant
#define

KEY
"çj]%Þ6f$.JÛ.$(ñå"

Dans l'application qui exploite cette lib, j'ai ce code-ci :

char

* pByte
=
new
char[16];memset

( pByte
,
0,
16
);

::memcpy
( pByte
, KEY
,
16
);

Normalement je devrai retrouver la valeur de mon #define dansmon pointeur suite au memcpy ?
pourtant voici ce que contient mon pointeur :

+ pByte 0x04b78f98 "çj]%Þ6f$.JÛ.$ýýýý««««««««îþîþ" char *

j'admet que je ne comprend pas ce qui arrive à cette chaine ... ??????
Et j'ai imperativement besoin de savoir ce qui se passe avec ce #define.

Cette clef sert à des operation d'encryption/decryption.
Dans le meme exe, cette bizarrerie n'as pas d'influence car elle apparait de la même maniere lors des 2 operations.
Par contre dans un autre projet la copie de KEY dans un pointeur me donne bien "çj]%Þ6f$.JÛ.$(ñå"
du coup si j'encrypte dans un projet A où KEY  KEY je ne peux pas decrypter la donné dans le projet B vu que KEY F(KEY),

J'ai bien cherché partout, et je ne vois pas de probleme d'unicode, tous les projets sont compilés avec les même options.
Enfin bref je donne ma langue au chat et je cherche des pistes ...

Merci.

4 réponses

Pistol_Pete Messages postés 1053 Date d'inscription samedi 2 octobre 2004 Statut Membre Dernière intervention 9 juillet 2013 7
17 mars 2008 à 10:45
Salut
Je ne sais pas si ca va corriger totalement ton probleme mais dans une chaine de caractere on laisse toujours une place pour le zero terminal.
Aussi, comme ta cle fait 16 caracteres, il faut que tu declares un tableau de 17 caracteres et que tu copies les 16 cracteres de ta cle + le zero terminal
Donc:
memcpy( pByte, KEY,17);

A+
Mon site internet : http://pistol.petesampras.free.fr
0
Ahryman40k Messages postés 14 Date d'inscription mardi 24 juin 2003 Statut Membre Dernière intervention 25 mars 2008
17 mars 2008 à 10:53
Je suis d'acord avec toi, mais le but ici n'est pas d'avoir une chaine de caractere avec un caractere de fin de chaine ...
je manipule ma donnée en sachant pertinament sa longueur.
0
Pistol_Pete Messages postés 1053 Date d'inscription samedi 2 octobre 2004 Statut Membre Dernière intervention 9 juillet 2013 7
17 mars 2008 à 11:05
Essaye 2 petites choses pour essayer de localiser le probleme:
-Remplace directement KEY par sa valeur memcpy( pByte,"çj]%Þ6f$.JÛ.$(ñå",17);

-Essaye avec strcpy

J'avoue que c'est tres etrange, memcpy copie ce qu'on lui donne... ca devrait marcher.
A+
Mon site internet : http://pistol.petesampras.free.fr
0
Ahryman40k Messages postés 14 Date d'inscription mardi 24 juin 2003 Statut Membre Dernière intervention 25 mars 2008
17 mars 2008 à 11:40
j'ai deja essayé tout cela, mais ca me fait la même chose.
J'ai orienté mes recherches sur des problemes de conversion ANSI / MBCS, bien que je ne comprend reellement pas pourquoi 'ç' devient "ç" ...
Mon idée et que ce qui est ecrit dans l'editeur est dans une table de caracteres et ce qui est transcrit dans le code est dans une autre table de caractere, un truc du genre ...
Mais dans ce cas, pourquoi mon autre code qui utilise la même lib se comporte lui correctement ... !!??
0
Rejoignez-nous