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 :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
data[] = "aaa\\0zzz\\0\\0";
La taille de data est donc bien de 12+1.

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...

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;
                }
            }
Elle n'est pas bien codé... je suis preneur de conseils à ce niveau au passage.

En testant avec des printf ça donne :

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>
Le résultat est... bon.

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...