Langage c

alicia85 Messages postés 68 Date d'inscription   Statut Membre Dernière intervention   -  
lami20j Messages postés 21331 Date d'inscription   Statut Modérateur, Contributeur sécurité Dernière intervention   -
Bonjour,
svp j ai un probleme en c .j arrive pas a allouer l 'espace memoire d'un pointeur sur caractere
merci j ai besoin de cela svp
A voir également:

3 réponses

lami20j Messages postés 21331 Date d'inscription   Statut Modérateur, Contributeur sécurité Dernière intervention   3 570
 
Salut,

montre nous ton code, pour voir pourquoi ça ne marche pas
0
alicia85 Messages postés 68 Date d'inscription   Statut Membre Dernière intervention  
 
merci voici mon code <<erreur de segmentation stp si tu peux m envoyer une reponse avant 22h
#include<stdio.h>
#include<string.h>
#include<conio.h>
#include<math.h>
#include<stdlib.h>
//FONCTION DE VERIFICATION DE TAILLE D UNE CHAINE
//il retourne 1 si la taille est egale a celle du type sinon 0
int verif ( char*s,int l)
{
if (l==(strlen(s)))
return 1;
else
return 0;

}

//FONCTION DE VERIFICATION DE LA TAILLE POUR LES TYPES CHAINE DE CARACTERE
int verif_char( char *s)
{if ((strlen(s))%8==0)
return 1;
else
return 0;
}
//FONCTION QUI PERMET D'EXTRAIRE UNE CHAINE DE CARACTERE
char *extract ( char*s,int deb,int fin){
char *ch=NULL;
int i;
if ((s!=NULL)&&(deb<fin)){
ch=malloc(sizeof(*ch)*(fin-deb+2));
if (ch!=NULL)
{for(i=deb;i<=fin;i++)
{ch[i-deb]=s[i];
}
ch[i-deb]='\0';
}
else
printf("erreur");

return(ch);
}
}
//FONCTION QUI DECODE UN ENTIER
int decode_int(char*s){
int val=0,i,l=strlen(s);
i=l-1;
while(i>=0){
if (s[i]==1)
{val=val+pow(2,i-l+1);
i++;}
i++;
}
}
//FONCTION QUI DECODE UNE CHAINE EN ENTIER DECIMAL NON SIGNE
int decode_uns(char *s)
{ int i,val,l=strlen(s);
char c;
for(i=l-1;i>=0;i++)
{ if (s[i]!=0)
val=val+pow(2,i-l+1);
}
}
//FONCTION QUI DECODE UNE CHAINE EN ENTIER DECIMAL SIGNE CPLMENT A 2
char *decode_cpl2 (char *s){
int j,i,l=strlen(s),val=0;
char *c,*c1;
c=(char*)malloc(sizeof(char));
c1=(char*)malloc(sizeof(char));
while(s!=NULL){
if (s[0]==1){
c="-";
val= decode_uns(s);
strcat(c,"val");
}
{ c="+";
i=l-1;
while((i>0)&&(s[i]==0)){i++;}
val+=pow(2,i-l+1);
for(j=i-1;j>0;j++){
if(s[i]==0)
val+=pow(2,i-l+1);
}
strcat(c,"val");
}
}
return(c);
}
//FONCTION QUI DECODE UNE CHAINE E ENTIER DECIMAL SIGNE CPLMENT 1

char *decode_cpl1(char*s){
int i,val=0,l=strlen(s);
char*c;
c=(char*)malloc(sizeof(char));
if (s[0]==1)
{ c="+";
i=l-1;
while(i>0){
if(s[i]==0)
{
val+=pow(2,i-l+1);
}
i++;
}
strcat(c,"val");
}
{
c="-";
strcat(c,"val");
}
return(c);
}
//FONCTION QUI DECODE UNE CHAINE EN REEL
char *decode_real1(char*s){
char*c1,*c2,*c3;
c1=(char*)malloc(sizeof(char));
c2=(char*)malloc(sizeof(char));
c3=(char*)malloc(sizeof(char));
int l=strlen(s),i=0,j,k,e,m;
if (s[i]==0){
c1="+";
}
c1="-";
j=2;k=9;
c2=extract(s,j,k);
e=decode_int(c2);
strcat(c1,c2);
if (s[10]==0)
{c3="+";}c3="-";
strcat(c1,c3);
for(i=11;i<=32;i++){
m+=pow(2,-i-1);}
strcat(c1,"m");
return(c1);
}
//FONCTION QUI DECODE UNE CHAINE EN CARACTERE
char decode_char(char*s) {
int n,val;
char c;
val=decode_int(s);
c=val;
return(val);
}
//FONCTION QUI DECODE UNE CHAINE EN CHAINE DE CARATERE
char *decode_chaine(char *s){
int i=0,j=7,val,l=strlen(s);
char*c1,c2,c3,*c4;
c4=(char*)malloc(sizeof(char));
c1=extract(s,i,j);
c2=decode_char(c1);
c4="c2";
while ((i<j)&&(j<l))
{ i+=8;
j+=8;
c1=extract(s,i,j);
c3=decode_char(s);
strcat(c4,"c3");
}
return(c4);
}
//FONCTION QUI DECODE UN FLOTTANT 2

int main(){
char*sh,*type,*c,c1;
int i,j,k,l,v,n;
printf("\t u:pour les entiers non signés\n\t d:pour les entiers decimaux signe a cplment a 2 \n\t b:pour les entiers decimaux signes cplmen a 1\n\t f:pour les flottants\n\t l:pour les flottants avec exposant biaise\n\t s:pour les chaines de caractere\n\t c pour les caracteres\n\n");
printf("\n ...pour le decodage taper 1....pour quitter taper 2\n");
scanf("%d",&n);
if(n==1){
type=(char*)malloc(sizeof(char));
c=(char*)malloc(sizeof(char));
sh=(char*)malloc(sizeof(char));
printf("\t ENTRER VOTRE TYPE:");
do
{scanf("%s",type);}
while(strlen(type)==2);
printf("\nENTRER VOTRE CHAINE ");
do{
scanf("%s",sh); k++;
}
while ((i<strlen(type))&&((sh[k]==0)||(sh[k]==1)));
//printf("la chaine est %s",sh);
if(type=="u"){
l=sizeof(unsigned int)*8;
v=verif (sh,l);
// printf("alors la %d",v);
if(v==1){
i=decode_int(sh);
printf("le code est %d\n:",i);
}
printf("erreur dans le code");
}
else
if(type=="b"){
l=sizeof(int)*8;
v=verif (sh,l);
if(v==1){
c=decode_cpl1(sh);
printf("le code est %s\n:",c);
}
printf("erreur dans le code");
}
else
if(type="d"){
l=sizeof(unsigned int)*8;
v=verif (sh,l);
printf("je suis %d",v);
if(v==1){
c=decode_cpl2(sh);
printf("le code est %s\n:",c);
}
printf("erreur dans le code");
}
else
if (type=="c"){
l=sizeof(char)*8;
v=verif (sh,l);
if(v==1){
c1=decode_char(sh);
printf("le code est %c\n:",c1);
}
printf("erreur dans le code");
}
else
if (type=="s"){
v=verif_char(sh);
if(v==1){
c=decode_chaine(sh);
printf("le code est %s\n:",c);
}
printf("erreur dans le code");
}
return 1;
}
exit(0);
getch();
getch();
}
0
alicia85 Messages postés 68 Date d'inscription   Statut Membre Dernière intervention  
 
tu es la ?
0
lami20j Messages postés 21331 Date d'inscription   Statut Modérateur, Contributeur sécurité Dernière intervention   3 570
 
Re,

je n'ai pas d'erreur moi
en revanche je n'ai pas compris ce que ton code veut faire

en plus j'ai remarqué par exemple que tes fonctions

//FONCTION QUI DECODE UNE CHAINE EN ENTIER DECIMAL NON SIGNE
int decode_uns (char *s)
{
  int i, val, l = strlen (s);
  char c;

  for (i = l - 1; i >= 0; i++) {
    if (s[i] != 0)
      val = val + pow (2, i - l + 1);
  }
}


et

int decode_int (char *s)
{
  int val = 0, i, l = strlen (s);

  i = l - 1;
  while (i >= 0) {
    if (s[i] == 1) {
      val = val + pow (2, i - l + 1);
      i++;
    }
    i++;
  }
}
ne retournent rien, et normalement les fonctions devraient retourner un int

voici les warnings que j'obtiens à la compilations
lami20j@debian:~$ gcc -W -Wall alicia.c -lm
alicia.c: In function 'verif':
alicia.c:9: warning: comparison between signed and unsigned
alicia.c: In function 'extract':
alicia.c:44: warning: control reaches end of non-void function
alicia.c: In function 'decode_int':
alicia.c:59: warning: control reaches end of non-void function
alicia.c: In function 'decode_uns':
alicia.c:65: warning: unused variable 'c'
alicia.c:71: warning: control reaches end of non-void function
alicia.c: In function 'decode_real1':
alicia.c:135: warning: unused variable 'l'
alicia.c: In function 'decode_char':
alicia.c:161: warning: unused variable 'n'
alicia.c: In function 'decode_chaine':
alicia.c:172: warning: unused variable 'val'
alicia.c: In function 'main':
alicia.c:213: warning: comparison between signed and unsigned
alicia.c:234: warning: suggest parentheses around assignment used as truth value
alicia.c:193: warning: unused variable 'j'


le programme je l'exécute mais je n'ai aucun résultat à part je suis 0erreur dans le code
0
jerémiethe7 Messages postés 152 Date d'inscription   Statut Membre Dernière intervention   32
 
oulà lami20j tu me déçoit !!! lol

Bon les fonctions retournent bien quelques chose par référence : les chaines de caractères des arguments d'entrée, car une chaine c'est un pointeur de caractères.
Par contre ce que veut peut être dire lami20j c'est que tu met des int NomDeTaFonction alors que ce serai plus joli de mettre des void.

Après je dois avouer que j'ai pas regardé ton programme, mais les calculs qui sont dans ces fonctions, il faudra bien les renvoyer.

++
et j'espère que j'ai pas dit trop de bêtises ^^.
0
lami20j Messages postés 21331 Date d'inscription   Statut Modérateur, Contributeur sécurité Dernière intervention   3 570
 
oulà lami20j tu me déçoit !!! lol

je crois que je vais continuer à te décevoir ;-)

Dans le main je vois ça

int i,j,k,l,v,n;
char*sh,*type,*c,c1;


Donc i c'est bien un int et sh un pointeur de caractère

Et plus bas (toujours dans main) je vois ça
if(v==1){
i=decode_int(sh);
printf("le code est %d\n:",i);
} 
Donc la fonction decode_int prends un argument un pointeur de caractère et doit retourner un entier qu'on le stocke en i

Le problème c'est que dans la fonction decode_int il n'y a pas de return (je pense que ça doit être return val; )


0