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
// 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; } }