Problème avec char et strcat en c

Fermé
pupuce86 Messages postés 5 Date d'inscription mardi 22 avril 2008 Statut Membre Dernière intervention 24 avril 2008 - 22 avril 2008 à 14:57
pupuce86 Messages postés 5 Date d'inscription mardi 22 avril 2008 Statut Membre Dernière intervention 24 avril 2008 - 22 avril 2008 à 21:25
salut à tous.
j'ai des problèmes avec les "char" . en fait je voulais faire une fonction qui initialise un tableau avec "" . Mais le problème c'est que quand j'utilise un seul p[ ] , dans ma 2ème fonction quand je modifie une case toutes les cases sont modifiées .J'ai essayé de faire avec un p2[ ] et là il modifie qu'un seule case. Mais comment je peux faire pour initialisé mon tableau ??car normalement je devrais avoir un tableau de 256 cases. car je peut pas faire de p[ ] a p256 [ ]. si qq1 pourrai m'aider car je vois vraiment pas comment faire
je vous remercie d'avance

voici le code :
Code :


#include <stdio.h>
#include <math.h>
#include <string.h>
#include <sys/types.h>
#include <unistd.h>
#include <fcntl.h>
#include <errno.h>
#include <stdlib.h>
#include<sys/stat.h>

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);

}


et le resultat :
Code :


00011
00011
00011
00011
00011
21

6 réponses

mype Messages postés 2435 Date d'inscription jeudi 1 novembre 2007 Statut Membre Dernière intervention 16 août 2010 436
22 avril 2008 à 16:39
j'ai pas trop compris ton probleme...
tu voudrais faire quoi exactement ? tu peux donner un exemple
0
cchristian Messages postés 921 Date d'inscription lundi 21 janvier 2008 Statut Membre Dernière intervention 6 mars 2012 131
22 avril 2008 à 16:59
Bonjour,

Mype a été plus rapide que moi, moi non plus je ne comprends pas très bien ce que tu veux faire, ton code est assez surprenant. Tu l'as fait tourner ?
0
pupuce86 Messages postés 5 Date d'inscription mardi 22 avril 2008 Statut Membre Dernière intervention 24 avril 2008
22 avril 2008 à 17:14
en fait j'ai fais 2 fonctions, la 1ere qui doit initialiser un tableau avec une chaine de caractere = "" et la 2ème fonction qui doit rajouter "1" à la moitié du tableau et "0" a la 2eme moitié. le probleme c'est que quand j'utilise un p[ ] dans la 1ère fonction lors de l'affichange chaque case a 6 valeurs "000111" alors qu'elle devrait en avoir qu'une, ou la valeur"1" ou la valeur"0". donc j'ai fais un test et j'ai essayé avec un p2 [] (que j'ai initialisé a "2") et dans cette case j'obtiens bien ce que je veux. Dans mon programme normalement je devrais avoir 256 cases. Mais comme je peux pas faire 256 p[]
Le but de la fonction c'est donc que je passe un tableau et il rajoute un "1" a la moitié du tableau et un "0"
a la 2eme moitié. cette fonction sera appelé par une autre fonction qui l'appellera avec la moitié du tableau. c'est a dire a chaque fois on divise le tableau en 2 et on rajoute des "1" et des "0".à la fin dans chaque case je dois avoir des chaines de binaires. par dans la 1ere case du tableau "0001" .j'ai mis [2560] car quand j'ai testé avec [256] il m'
affiché des erreur de segmentation. ( je sais pas pour quoi )
J'espère que c'est un peu plus claire maintenant
est ce que vous pouvez m'aider s'il vous plait car je suis bloquée.
je vous remercie pour votre réponse

ps:le but ultime de mon programme(qui comporte d'autres fonctions)est de réaliser la compression et la décompression
selon la méthode de shannon fano.
0
mype Messages postés 2435 Date d'inscription jeudi 1 novembre 2007 Statut Membre Dernière intervention 16 août 2010 436
22 avril 2008 à 17:55
ok j'ai mieux compris ce que tu veux faire...
essaye ça
#include <stdio.h>
#include <math.h>
#include <string.h>
#include <sys/types.h>
#include <unistd.h>
#include <fcntl.h>
#include <errno.h>
#include <stdlib.h>
#include<sys/stat.h>

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

int i;
char p=' ';

for(i=0; i<taille; i++){
*tab[i] =p;
}

}

void codage(){
char *tab[2560];
int i,j;
int k=3;
char zero='0';
char un='1';
for(i=0;i<2560;i++) tab[i]=(char *) malloc(100*sizeof(char));
initialisation(tab,6);
for(i=0; i<k ; i++){

*tab[i]= zero;
}
for(j=k; j < 6 ;j++){

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

}

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

codage();

return (EXIT_SUCCESS);

}

0

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

Posez votre question
mype Messages postés 2435 Date d'inscription jeudi 1 novembre 2007 Statut Membre Dernière intervention 16 août 2010 436
22 avril 2008 à 21:21
il vaut mieux que tu repondes sur le forum pour que tous le monde puisse profiter...
puisque dans chaque case tu doit avoir une chaine
essaye ça
#include <stdio.h>
#include <math.h>
#include <string.h>
#include <sys/types.h>
#include <unistd.h>
#include <fcntl.h>
#include <errno.h>
#include <stdlib.h>
#include<sys/stat.h>

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

int i;
char p[2560]="";

for(i=0; i<taille ; i++){
tab[i] =p;
}

}

void codage(){
char *tab[2560];
int i,j;
int k=3;
char *zero="0";
char *un="1";
for(i=0;i<2560;i++) tab[i]=(char *) malloc(100*sizeof(char));
initialisation(tab,6);
for(i=0; i<k ; i++){

tab[i]=zero;
}
for(i=k; i < 6 ;i++){

tab[i]=un;
}

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


}

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

codage();

return (EXIT_SUCCESS);

}


pour ton probleme d'erreur de segmentation quand tu declares ton tableau en variable globale c'est surement parce que tu utilises un tableau dynamique mais tu ne lui alloue pas de memoire il faut que tu utilises des malloc...
0
pupuce86 Messages postés 5 Date d'inscription mardi 22 avril 2008 Statut Membre Dernière intervention 24 avril 2008
22 avril 2008 à 21:25
Merci pour toutes les réponses.Je vais essayer si ça marche et je vous tiens au courant.
Merci encore ;-)
0