Registre et chaines multiples win32

Résolu
rastalalalolo Messages postés 17 Date d'inscription lundi 22 novembre 2004 Statut Membre Dernière intervention 15 janvier 2010 - 4 avril 2005 à 18:34
rastalalalolo Messages postés 17 Date d'inscription lundi 22 novembre 2004 Statut Membre Dernière intervention 15 janvier 2010 - 12 avril 2005 à 11:08
Bonjour a tous

Je travaille sur dev cpp avec la librairie mingw pour info.

J'aimerai récupérer toutes les données d'une valeur de type chaine multiple du registre.

J'utilise RegQueryValueEx et je recupere la premiere donnée de la chaine celle terminer par \0.

Par contre pour les autres ben j'arrive pas.

Je comprends le principe d'une chaine multiple qui se compose de chaines séparées par \0 et finissant par double \0.

Par contre j'ai pas trouvé de fonction toute faite pour bosser avec des chaines multiples.

J'ai regarder sur le forum mais je trouve pas mon bonheur. Faut que je nettoie mes lunettes peut etre;)

J'ai surement merder quelque part ou oublier un truc essentiel, bref je sais pas et je stagne... snifff...

Je sais que certains d'entre vous peuvent m'aider, comme bruno:) pour n'en siter qu'un...

Tous le monde est bienvenue si ca vous gave pas de m'aider biensur...

Merci d'avance et Peace!!!

@peluche

4 réponses

ymca2003 Messages postés 2070 Date d'inscription mardi 22 avril 2003 Statut Membre Dernière intervention 3 juillet 2006 7
4 avril 2005 à 18:50
imaginons que tu récupère les chaînes dans un buffer du type (assez grand pour toutes les chaînes, dynamiquement alloué idéalement)
char buf[1024];

Maintenant tu sais que les sous-chaînes sont séparées par des '\0', la dernières doit avoir 2 '\0'.

char* s = buf;
char* e;
while(*s != '\0')
{
// recherche fin
e = strchr(s, '\0');

// traitement chaîne contenue dans s
printf(s);

// passage à la suivante
s = e+1;
}
3
ymca2003 Messages postés 2070 Date d'inscription mardi 22 avril 2003 Statut Membre Dernière intervention 3 juillet 2006 7
7 avril 2005 à 10:21
Si une chaîne multiple n'en contient qu'une elle doit se terminer par 2 '\0' sinon c'est pas jouable de savoir ce qu'il y a dedans.
3
rastalalalolo Messages postés 17 Date d'inscription lundi 22 novembre 2004 Statut Membre Dernière intervention 15 janvier 2010
7 avril 2005 à 10:19
Salut Ymca2003

Désolé d'avoir pas répondu avant, je cours partout en ce moment...

J'ai pas tester ton code mais en le lisant ben c'est nikel.

Damned, je l'avais oublier cette strchr.... grrrr

Je te remercie pour ta réponse et ta rapidité, punaise...!!!:D.

Une question encore svp, suis chiant hihi....

Est ce qu'une chaine multiple qui ne contient qu'une chaine au lieu de plusieurs à l'habitude, se termine par '\0' ou tjs '\0\0'

Parce que si c'est le cas:

1ere itération: ok

2ieme itération: strchr récupère NULL parce qu'il trouve plus de '\0'

e pointe vers NULL, on se place à l'adresse + 1, et la paff, pop corn...

ps: j'adore les crash en c, c'est tjs un effet nouveau lol;)



char* s = buf;
char* e;
while(*s != '\0')
{
// recherche fin
e = strchr(s, '\0');

if ( e==NULL )

break;

// traitement chaîne contenue dans s
printf(s);

// passage à la suivante
s = e+1;
}



tu en pense koi svp?

Une chaine multiple se finit tjs par '\0\0' si elle ne contient qu'une string?

Encore Grand Merci à Toi!!!

Bonne journée et Peace Man¤

@peluche

RastaDaNoobString
0
rastalalalolo Messages postés 17 Date d'inscription lundi 22 novembre 2004 Statut Membre Dernière intervention 15 janvier 2010
12 avril 2005 à 11:08
Merci pour tes lumieres Ymca2003!!!

Désolé pour les temps de réponse et merci pour les tiens!!!

Bonne journée et Peace!!!
0
Rejoignez-nous