Bonjour,
Je n'arrive pas vraiment à trouver la source du problème, je présume que le problème vient de la taille du tableau, mais aucune certitude. Ou alors une mauvaise utilisation de realloc ?
On va prendre un exemple :
La taille de data est donc bien de 12+1.
Code : Sélectionner tout - Visualiser dans une fenêtre à part data[] = "aaa\\0zzz\\0\\0";
Le but est d'obtenir tableau de telle sorte que :
tableau[0] = a
tableau[1] = a
tableau[2] = a
tableau[3] = '\0'
tableau[4] = z
tableau[5] = z
tableau[6] = z
tableau[7] = '\0'
tableau[8] = '\0'
Le but est donc de remplacer le \ et le 0 par '\0'. La taille de tableau est donc égale à la taille de data, caractère nul non compris, donc ici 12, moins le nombre de fois ou l'on rencontre à la suite les deux caractères \ et 0 dans la chaîne data, soit 3 ici : d'où taille de tableau = 9.
J'ai codé la fonction suivante...
Elle n'est pas bien codé... je suis preneur de conseils à ce niveau au passage.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36 int b = -1; int taille = 0; int count = 0; char *tableau = NULL; if ((tableau = (char*)malloc(COMPTER_CH(data))) == NULL) { printf("Erreur d'allocation mémoire !\n"); } while (++b <= COMPTER_CH(data)-count) { if (data[b] == '0' && data[b-1] == '\\') { continue; } if (data[b] == '\\' && data[b+1] =='0') { if ((tableau = realloc(tableau, COMPTER_CH(data)-(++count))) != NULL) { tableau[taille] = '\0'; taille += 1; } else { printf("Erreur d'allocation mémoire !\n"); } } else { tableau[taille] = data[b]; taille += 1; } }
En testant avec des printf ça donne :
Le résultat est... bon.taille de tableau = 12
b = 0
tableau[0] = a
b = 1
tableau[1] = a
b = 2
tableau[2] = a
b = 3
taille de tableau = 11
tableau[3] = <null>
b = 4
b = 5
tableau[4] = z
b = 6
tableau[5] = z
b = 7
tableau[6] = z
b = 8
taille de tableau = 10
tableau[7] = <null>
b = 9
b = 10
taille de tableau = 9
tableau[8] = <null>
Seulement, quand j'envoie tableau à RegSetValueEx, dans le registre, j'obtiens ça :
61,00,61,00,61,00,00,00,7a,00,7a,00,7a,00,00,00,00,00,4c,00,
41,00,54,00,46,00,4f,00
La valeur en vert correspond à aaa<null>zzz<null><null> et l'autre à des caractères non voulus... qui viennent de je ne sais où.
Je ne comprends pas pourquoi j'ai ici ces caractères en trop... je présume que mon tableau ne fait pas 9 en taille, mais bien plus... mais je n'arrive pas à trouver pourquoi j'obtiens un tel résultat...
Merci par avance de votre aide.
Je cherche depuis 2 bonnes heures, en reprenant à zéro à chaque fois, mais sans succès jusqu'à présent. J'ai dû me planter dans mes compteurs et l'incrémentation de mes variables...
![]()
Partager