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 ?
- Lien copie - Forum Android
- Copie cachée - Guide
- Lien copié - Forum Android
- Super copie - Télécharger - Gestion de fichiers
- Envoyez ce mail à manon (manon@pixmail.org) en mettant en copie nina (nina@pixmail.org) : ✓ - Forum Loisirs / Divertissements
2 réponses
[Dal]
Messages postés
6057
Date d'inscription
mercredi 15 septembre 2004
Statut
Contributeur
Dernière intervention
17 mars 2023
1 043
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
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
48
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
// char *tab1; char tabdada[15]={' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ','\0'}; for(i=0;i<14;i++) { for(j=0;j<14;j++) { if(tabdada[j]!=' ') { tab1[i]=tabdada[j]; tabdada[j]=' '; break; } }