Je programme en C depuis maintenant 2 ans mais je rencontre encore beaucoup des problèmes avec l'utilisation des pointeurs notamment comme aujourd'hui avec le programme ci-dessous et dont je n'arrive pas à trouver la solution:
Mon se trouve dans la variable "LedsEnDefaut" qui ne récupère pas la valeur de la variable "DetailsErreur"
int main (int argc, char *argv[])
{ char LedsEnDefaut [8] [10]; unsigned int erreur = 5; unsigned int DeciResult = 0;
TraitementErreur(DeciResult, &NbrDefaut, &ReferenceValue[SEQ_LED_ROUGE_ON][Seq_Test], &LedsEnDefaut);
return 0;
}
void TraitementErreur(unsigned int MesureDeci, int *Compteur, unsigned int *ValeurDeReference [8], char *DetailsErreur [8] [10])
{
int MesureBin [14];
int ReferenceBin [14];
int i = 0 ;
char LedDefaut [8] [30];
N_Ligne = 0 ;
ConvertDeciToBin(MesureDeci, MesureBin);
ConvertDeciToBin(ValeurDeReference[N_Ligne], ReferenceBin);
//Compare les valeurs binaire et en ressort la valeur erronée
for(N_Ligne = 1; N_Ligne <= 14; N_Ligne++)
{
if(MesureBin[N_Ligne - 1] != ReferenceBin[N_Ligne - 1])
{
GetTableCellVal (panelTest_g, PANEL_TEST_TABLE, MakePoint (1, N_Ligne), LedDefaut [i]);
(*DetailsErreur) [i] = LedDefaut [i];
i++;
} //DetailsErreur [NbrDefaut]
}
*Compteur = i;
}
PS: Tout conseil pour l'amélioration du programme est bon à prendre
En espérant que vous preniez le temps de me répondre.
La ligne 24 ne devrait pas compiler si tu avais défini correctement le dernier paramètre ligne 6 par char (*DetailsErreur)[8][10]. Tu aurais : on ne peut pas avoir un tableau à gauche du signe égal.
De plus, la variable DetailErreur contient une indirection de plus dont on peut se passer, on peut simplifier. Ça donne
// ligne 2
TraitementErreur(DeciResult, &NbrDefaut, &ReferenceValue[SEQ_LED_ROUGE_ON][Seq_Test], LedsEnDefaut); // pas de &
// ligne 6
void TraitementErreur(unsigned int MesureDeci, int *Compteur, unsigned int *ValeurDeReference [8], char DetailsErreur[][10]) // pas de * et pas de risque d'oublier une parenthèse
// ligne 24
memcpy( DetailsErreur[i] , LedDefaut[i] , sizeof DetailsErreur[i] ); // copier intégralement l'élément
Une précision pour le cas d3[][10]. C'est celui que j'ai utilisé. Cette syntaxe n'a pas de sens pour définir une variable, mais elle est possible dans la définition d'un paramètre.
void fonction( char d3[][10] ); // d3 n'est pas un paramètre tableau de tableau
// est équivalent à
void fonction( char (*d3)[10] ); // d3 est un pointeur sur un tableau
Cette syntaxe en tableau est une "tolérance" car elle correspond au cas où on veut transmettre un tableau, elle en garde la forme. Mais en fait, un tableau ne peut pas être passé en paramètre, il est immédiatement converti en un pointeur sur son premier élément à cet instant. On obtient donc bien la seconde ligne. On peut tout fait indiquer un nombre entre les premiers crochets comme tu l'as fait, mais ce nombre est forcément ignoré.
D'accord merci bien je comprend beaccoup mieux d'autres erreur que j'ai sur d'autre programme un grand merci à vous.
Erreur de pointeurs dans un programme
× Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
× Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
En recherche d'emploi.
En recherche d'emploi.