Problème de taille de tableau
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:
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:
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 :
Citation:
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...
:ccool: