Probleme avec char et strcat :'(

Signaler
Messages postés
19
Date d'inscription
vendredi 3 juin 2005
Statut
Membre
Dernière intervention
27 avril 2008
-
Messages postés
19
Date d'inscription
vendredi 3 juin 2005
Statut
Membre
Dernière intervention
27 avril 2008
-
bonjour a tous.
j'ai un probleme avec char er stract. enfaite j'ai fais 2 fonction. la 1ere qui doit initialisé un tableu avec une chaine de caractere = "" et la 2eme fonction qui doit rajouter "1" a la moitier du tableu et "0" a la 2eme moitié. le probleme c'est que quand j'utilise un p[ ] dans la 1ere fonction lors de l'affichange chaque case a 6 valeurs "000111" alor qu'elle devrais avoir qu'une. ou "1" ou "0". don j'ai fais un test et j'ai essayé avec un p2 [] (que j'ai initialisé a "2") et dans cette case j'obtien bien ce que je veut. Dans mon programme normalement je devrais avoir 256 case. Mais comme je peu pas faire 256 p[] est ce que qq1 pourais m'aider? car je vois pas comment faire.
je vous remercie d'avance pour votre reponse

je join le code et le resultat :


void initialisation(char *tab[],int taille){

int i;
char p[2560]="";
char p2[2560]="2";
for(i=0; i<taille-1 i="" tab="" void="" codage="" char="" int="" k="3;" initialisation="" for="" j="">< 6 ;j++){

tab[j]=strcat( tab[j],un);
}
for(i=0;i<6;i++){
printf("%s\n",tab[i]);
}
}






int main (int argc, char ** argv){
codage();

return (EXIT_SUCCESS);

}


reultat :

00011
00011
00011
00011
00011
21

</taille-1>

6 réponses

Messages postés
38
Date d'inscription
jeudi 8 novembre 2007
Statut
Membre
Dernière intervention
25 avril 2008

Bonjour
Je comprends pas tout ce que tu veux faire essaye d'être plus clair et surtout indente ton code c'est illisible comme sa.
Mais je vois déjà une erreur:
au niveau du premier for dans ta fonction d'init tu as :
for(i=0; i< 6 ;j++)
il faut le remplacer par
for(i=0; i< 6 ;i++)
Je ne sais pas si ton erreur vient de la car je n'ai pas tout compris mais c'est deja un début.
Tiens nous au courant.
Messages postés
19
Date d'inscription
vendredi 3 juin 2005
Statut
Membre
Dernière intervention
27 avril 2008

rebonjour,
tout d'abord je suis desolé pour la forme de la fonction. j'ai été sur knopix et il a enlevé tout les espaces et saut a la ligne
je join encor une fois la fonction. mon but est de ecrire une 1ere fonction qui initialise un tableau de chaine de caracteres a  "" . ma  2eme fonction prend ce tableau  et  dans la 1ere moitié du tableau elle va rajouté un "0" a chaque case. puis dans la 2eme moitié elle va rajouté un "1". par ex si j'ai mon tableau vide et il a 6 case par ex j'aurais 000111. c'est a dire dans la 1ere case "0" dans la 2eme "0" .... par ex si je fais ma fonction avec ce nouveau tableau j'aurais 000000111111 dans la 1ere case j'aurais "00" dans la 2eme "00" .... ici dans chaque case du tableau (sauf la derniere j'ai 000111)
le probleme c'est qu'il faut une adresse differente pour chaque p[]. et comme je peut pas faire a la main 256 p[] (la j'ai essayé avec un p2[]) je voudrais savoir si qq1 conait une methode pour resoudre ce probleme ou peu etre une autre solution pour ma fonction. si qq1 pouvais m'aidé car je suis bloqué et je peut pas avancé
je vous remercie d'avance









void initialisation(char *tab[],int taille){

  int i;
  char p[2560]="";
  char p2[2560]="2";
  for(i=0; i<taille-1 ; i++){
    tab[i] =p;
  }
  tab[taille-1] =p2;
}
 

void codage(){
  char *tab[2560];
  int i,j;
  int k=3;  
  char *zero="0";
  char *un="1";
 
  initialisation(tab,6);
  for(i=0; i<k ; i++){  
     
    tab[i]= strcat( tab[i] ,zero);
  }   
  for(j=k; j < 6 ;j++){
      
    tab[j]=strcat( tab[j],un);
  }
  for(i=0;i<6;i++){
    printf("%s\n",tab[i]);
  }
}

int main (int argc, char ** argv){
    codage();
  return (EXIT_SUCCESS);

}

resultat :

 00011
 00011
 00011
 00011
 00011
 21
Messages postés
966
Date d'inscription
samedi 3 avril 2004
Statut
Membre
Dernière intervention
4 mars 2010
4
Je sais pas si c'est ce que tu veux

void FillArray(char* pOld,char*pNew,int len)
{
   for(int i=0;i<size;i++)
   {
      pNew[2*i]=pOld[i];
      pNew[2*i+1]=(i/size)+'0';
   }
   pNew[len]=0x0;
   return;
}

utilisation :
char pOld[]="0011";
char pNew[9];
FillArray(pOld,pNew);
résultat : pNew="00001111";
Messages postés
966
Date d'inscription
samedi 3 avril 2004
Statut
Membre
Dernière intervention
4 mars 2010
4
ah zut remplacer 'size' par 'len' dans la condition d'arrêt du for
et pour l'utilisation FillArray(pOld,pNew,4);
Messages postés
65
Date d'inscription
vendredi 10 février 2006
Statut
Membre
Dernière intervention
21 octobre 2009

char *tab[2560]; //Tu initialises un tableau de 2560 pointeur de type char
Et tu initialise cela bizarement
tab[i] = (char*)malloc((taille+1)*sizeof(char));
Voila pour une initialisation correcte des pointeurs.
taille+1 : pour eviter d'oublier de laisser de la place pour le '\0' de fin de chaine.

char *un = '1';
char *zero = '0';
Non il faut utiliser les options de precompilation si tu veux faire comme cela
#define un '1'
#define zero '0'

Voila pour ce qu j'ai vu,aprés j'ai pas le temps de testé ton programme.
Bye
Messages postés
19
Date d'inscription
vendredi 3 juin 2005
Statut
Membre
Dernière intervention
27 avril 2008

Merci pour vos reponses. je vais esayer de testé