Copie incorrect ?
Résolu
sambia39
Messages postés
610
Date d'inscription
Statut
Membre
Dernière intervention
-
sambia39 Messages postés 610 Date d'inscription Statut Membre Dernière intervention -
sambia39 Messages postés 610 Date d'inscription Statut Membre Dernière intervention -
Bonjour
je viens demander l'avis aux experts, pourquoi le premier caractère du tableau n'est pas copié ? enfin je trouve ça un peu bizarre quelqu'un pourrais éclairer ma lanterne ?
Merci & à bientôt
je viens demander l'avis aux experts, pourquoi le premier caractère du tableau n'est pas copié ? enfin je trouve ça un peu bizarre quelqu'un pourrais éclairer ma lanterne ?
Merci & à bientôt
#include <stdio.h> #include <stdlib.h> int main(void){ int i = 0; char Tab_B[] = {"S alut C omment tu v as\0"}; char *pTab_A = malloc( sizeof(Tab_B) ); /* Copie & décalage */ char *pAlias = Tab_B; while(*pAlias++){ if(*pAlias != ' '){ pTab_A[i++]=*pAlias; } } *pAlias='\0'; /* Contôle */ printf("Résultat = %s\n",pTab_A); free(pTab_A); pTab_A = NULL; if(pTab_A != NULL){ printf("No Free\n"); return (EXIT_FAILURE); } return (EXIT_SUCCESS); }
A voir également:
- Copie incorrect ?
- Copie cachée - Guide
- Super copie - Télécharger - Gestion de fichiers
- Copie écran samsung - Guide
- Copie disque dur - Guide
- Copie rapide - Télécharger - Gestion de fichiers
2 réponses
Salut Sambia,
le père a raison, tu incrémentes le pointeur avant de copier.
Cependant, si tu veux incrémenter ton pointeur dans la boucle while, tu peux utiliser les propriétés de l'incrémentation postfix, et en profiter pour y incrémenter aussi l'autre pointeur et réaliser l'affectation d'un coup, ainsi que le test et la copie du caractère '\0' de terminaison de chaîne.
Cela donne un code comme cela :
Dal
le père a raison, tu incrémentes le pointeur avant de copier.
Cependant, si tu veux incrémenter ton pointeur dans la boucle while, tu peux utiliser les propriétés de l'incrémentation postfix, et en profiter pour y incrémenter aussi l'autre pointeur et réaliser l'affectation d'un coup, ainsi que le test et la copie du caractère '\0' de terminaison de chaîne.
Cela donne un code comme cela :
#include <stdio.h> #include <stdlib.h> int main(void){ char Tab_B[] = {"S alut C omment tu v as\0"}; char * A = malloc( sizeof(Tab_B) ); /* Copie & décalage */ char * pB = Tab_B; /* pointeur vers le 1er élément de Tab_B */ char * pA = A; /* pointeur vers A */ while ((*pA++ = *pB++)) { if (*(pA - 1) == ' ') /* si on a copié un espace */ pA--; /* on l'efface */ } /* Contrôle */ printf("Résultat = %s\n", A); free(A); A = NULL; return 0; }
Dal
http://www.cplusplus.com/reference/cstdlib/free/
c'est à toi de le mettre à NULL après avoir désalloué la mémoire, comme tu le fais, si cela est utile dans ton code d'identifier ce pointeur comme étant désormais NULL.
Dal