Probleme avec char et strcat :'(

cs_paulina82 Messages postés 19 Date d'inscription vendredi 3 juin 2005 Statut Membre Dernière intervention 27 avril 2008 - 22 avril 2008 à 12:43
cs_paulina82 Messages postés 19 Date d'inscription vendredi 3 juin 2005 Statut Membre Dernière intervention 27 avril 2008 - 27 avril 2008 à 18:02
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

cephalic Messages postés 38 Date d'inscription jeudi 8 novembre 2007 Statut Membre Dernière intervention 25 avril 2008
22 avril 2008 à 16:27
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.
0
cs_paulina82 Messages postés 19 Date d'inscription vendredi 3 juin 2005 Statut Membre Dernière intervention 27 avril 2008
22 avril 2008 à 17:49
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
0
cs_juju12 Messages postés 966 Date d'inscription samedi 3 avril 2004 Statut Membre Dernière intervention 4 mars 2010 4
22 avril 2008 à 18:38
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";
0
cs_juju12 Messages postés 966 Date d'inscription samedi 3 avril 2004 Statut Membre Dernière intervention 4 mars 2010 4
22 avril 2008 à 18:39
ah zut remplacer 'size' par 'len' dans la condition d'arrêt du for
et pour l'utilisation FillArray(pOld,pNew,4);
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
Cyr62110 Messages postés 65 Date d'inscription vendredi 10 février 2006 Statut Membre Dernière intervention 21 octobre 2009
22 avril 2008 à 18:47
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
0
cs_paulina82 Messages postés 19 Date d'inscription vendredi 3 juin 2005 Statut Membre Dernière intervention 27 avril 2008
27 avril 2008 à 18:02
Merci pour vos reponses. je vais esayer de testé
0