Langage c

alicia85 Messages postés 75 Statut Membre -  
lami20j Messages postés 21506 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
Configuration: Windows 2000
Internet Explorer 6.0

3 réponses

  1. lami20j Messages postés 21506 Date d'inscription   Statut Modérateur, Contributeur sécurité Dernière intervention   3 571
     
    Salut,

    montre nous ton code, pour voir pourquoi ça ne marche pas
    0
    1. alicia85 Messages postés 75 Statut Membre
       
      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
    2. alicia85 Messages postés 75 Statut Membre
       
      tu es la ?
      0
  2. lami20j Messages postés 21506 Date d'inscription   Statut Modérateur, Contributeur sécurité Dernière intervention   3 571
     
    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
    1. jerémiethe7 Messages postés 153 Statut Membre 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
  3. lami20j Messages postés 21506 Date d'inscription   Statut Modérateur, Contributeur sécurité Dernière intervention   3 571
     
    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