Copie incorrect ?
Résolu/Fermé
sambia39
Messages postés
610
Date d'inscription
vendredi 31 juillet 2009
Statut
Membre
Dernière intervention
9 février 2023
-
3 juin 2014 à 10:54
sambia39 Messages postés 610 Date d'inscription vendredi 31 juillet 2009 Statut Membre Dernière intervention 9 février 2023 - 3 juin 2014 à 13:31
sambia39 Messages postés 610 Date d'inscription vendredi 31 juillet 2009 Statut Membre Dernière intervention 9 février 2023 - 3 juin 2014 à 13:31
A voir également:
- Copie incorrect ?
- Copie cachée - Guide
- Copie écran samsung - Guide
- Super copie - Télécharger - Gestion de fichiers
- Copie disque dur - Guide
- Copie rapide - Télécharger - Gestion de fichiers
2 réponses
[Dal]
Messages postés
6203
Date d'inscription
mercredi 15 septembre 2004
Statut
Contributeur
Dernière intervention
29 janvier 2025
1 097
3 juin 2014 à 13:05
3 juin 2014 à 13:05
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
Utilisateur anonyme
3 juin 2014 à 11:25
3 juin 2014 à 11:25
Bonjour
Le premier caractère n'est pas recopié parce que tu incrémentes le pointeur AVANT de recopier :
Le premier caractère n'est pas recopié parce que tu incrémentes le pointeur AVANT de recopier :
while(*pAlias++){
sambia39
Messages postés
610
Date d'inscription
vendredi 31 juillet 2009
Statut
Membre
Dernière intervention
9 février 2023
49
Modifié par sambia39 le 3/06/2014 à 11:42
Modifié par sambia39 le 3/06/2014 à 11:42
Bonjour , merci de ta réponse
le
dans mon précédent code elle me permettait de contrôle la variable si elle est bien à NULL.
le
if(pTab_A != NULL)ne sert rien,
dans mon précédent code elle me permettait de contrôle la variable si elle est bien à NULL.
Modifié par [Dal] le 3/06/2014 à 13:19
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
3 juin 2014 à 13:31