IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

C Discussion :

chaine de caractères , erreur segmentation


Sujet :

C

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Juillet 2002
    Messages
    188
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2002
    Messages : 188
    Par défaut chaine de caractères , erreur segmentation
    Bonjour,
    je fais un ptit programme qui convertit un entier décimal en une chaine de caractès "binaire"

    ex: 10 sera convertit en 0000 1010

    Voici mon code
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
     
     
     
    char  * octet;
    char * binaire;
     char * conversion (int decimal);
     
     
    int main ()
    {
    binaire=conversion(10); // je met dans la chaine binaire le résultat de la conversion du 10
    }
     
     
     char * conversion (int decimal)
    {
    // je remplis ici ma chaine octet  en faisant des octet[i]='0'; ou octet[j]='1'; et j'oublie pas //le octet[8]='\0'; pour le dernier caractère
     
    return octet // je retourne ma chaine octet
    Mais j'ai une erreur segmentation fault..

    Merci

  2. #2
    Rédacteur/Modérateur
    Avatar de Trap D
    Profil pro
    Inscrit en
    Septembre 2003
    Messages
    4 942
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2003
    Messages : 4 942
    Par défaut
    Si tu montrais le code en détail de cette fonction, ce serait beaucoup mieux. Je soupçonne l'utilisation d'un bufer interne à la fonction ...
    PS J'ai mal lu, ta chaîne globale octet (ça n'est déjà pas beau) n'est pas initialisée, (c'est encore pire).
    "La haine seule fait des choix" - Koan Zen
    "Il ne faut pas être meilleur que les autres, il faut être meilleur que soi." Albert Jacquard
    "Ceux qui savent où ils ont posé leur parapluie ne sont pas alcooliques." - pgibonne.
    Faites du Prolog, ça vous changera les idées !
    Ma page Prolog
    Mes codes sources commentés

    Mon avatar : La Madeleine à la veilleuse de Georges de La Tour

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Juillet 2002
    Messages
    188
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2002
    Messages : 188
    Par défaut
    voici mon code


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
     
     
     
    #include <stdlib.h>
    #include <stdio.h>
    #include <time.h>
     
    int reste;
    char  * octet;
    char * chaine;
    char * conversion (int decimal);
     
     
    int main ()
    {
    chaine=conversion(10);
    }
     
     
     char * conversion (int decimal)
    {
       int i,j,l;
     
     
        l=128;// l définit le premier seuil 128
     
     
           for (i=0;i<8;i++) // initialisation de la chaine de caractere octet
              {
                  octet[i]='0';
              }  
    	octet[8]='\0';
     
     
    if (decimal != 0)
    {
     
     
       reste=decimal%2;
     
      if (reste ==1)
    {
          octet[7]='1';
      decimal=decimal-1;
    }
     
       else octet[7]='0';   
     
        i=0;
     
     
    while ( decimal!=0)
    {
          if (decimal<l)
          {
              octet[i]='0';
              l=l/2;
              i++;
          }
     
            if (decimal>l)
          {
              octet[i]='1';
    	   decimal=decimal -l;
              l=l/2;
              i++;
          }
     
                 if (decimal==l)
          {
              octet[i]='1';
              i++;
              for (j=i;j<8;j++)
              {
                  octet[j]='0';
              }    
    		octet[8]='\0';
     
                       decimal=0;
          }
    }         
     
     
    }
     
    return octet;
    }

  4. #4
    Expert éminent
    Avatar de Emmanuel Delahaye
    Profil pro
    Retraité
    Inscrit en
    Décembre 2003
    Messages
    14 512
    Détails du profil
    Informations personnelles :
    Âge : 68
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2003
    Messages : 14 512
    Par défaut
    Citation Envoyé par psgman113
    voici mon code
    Ne compile pas...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    Project   : Forums
    Compiler  : GNU GCC Compiler (called directly)
    Directory : C:\dev\forums2\
    --------------------------------------------------------------------------------
    Switching to target: default
    Compiling: main.c
    main.c:7: warning: function declaration isn't a prototype
    main.c: In function `conversion':
    main.c:31: error: `reste' undeclared (first use in this function)
    main.c:31: error: (Each undeclared identifier is reported only once
    main.c:31: error: for each function it appears in.)
    Process terminated with status 1 (0 minutes, 2 seconds)
    3 errors, 1 warnings
    Sinon, ce code me parait atrocement compliqué...

    Je vais te révéler un Grand Secret : "En informatique, les données sont codées en binaire".

    Donc, avec une combinaison astucieuse de décalages (>>, <<) et de masquage (&), tu devrais déterminer si les bits valent 0 ou 1 et afficher '0' ou '1' en conséquence...

  5. #5
    Membre confirmé
    Profil pro
    Inscrit en
    Juillet 2002
    Messages
    188
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2002
    Messages : 188
    Par défaut
    voilà j'ai modifié mes ptits oublis dans ma copie
    Ok pour le codage en binaire qui doit être plus facile mais comme j'ai passé un peu de temps,
    prenons mon code


    En fait à la base je voudrais retourner ce tableau ou cette chaine de caractère à partir d'une fonction,
    J'ai utilisé une chaine de caractères car je n'arrive pas à retourner un tableau d'entiers.

    merci

  6. #6
    Membre émérite
    Profil pro
    Inscrit en
    Octobre 2004
    Messages
    633
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2004
    Messages : 633
    Par défaut
    Bonjour,

    Les variables globales, ce n'est pas très bon.

    Où sont les réservations mémoires pour tes pointeurs ?

    Sans oublier leur libération, ensuite.

    Et comme te l'a dit Emmanuel, côté algorithme, c'est plutôt compliqué.

  7. #7
    Expert éminent
    Avatar de Emmanuel Delahaye
    Profil pro
    Retraité
    Inscrit en
    Décembre 2003
    Messages
    14 512
    Détails du profil
    Informations personnelles :
    Âge : 68
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2003
    Messages : 14 512
    Par défaut
    Citation Envoyé par psgman113
    Ok pour le codage en binaire qui doit être plus facile mais comme j'ai passé un peu de temps,
    prenons mon code
    Pas d'accord. L'essence de l'informatique, c'est pas le codage, qui un jour ou l'autre sera totalement automatisé (ou fait par des indiens, voire des chinois...), mais c'est la recherche du meilleur algorithme. Alors concentre toi plutôt là dessus, parce que c'est la base et c'est là qu'on développe ses connexions neuronales.

    Il est inutile de perdre du temps à coder un algorithme faux ou inefficace.

  8. #8
    Membre confirmé
    Profil pro
    Inscrit en
    Juillet 2002
    Messages
    188
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2002
    Messages : 188
    Par défaut
    Merci pour l'aide , j'ai trouvé

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 15
    Dernier message: 31/05/2013, 15h57
  2. Réponses: 11
    Dernier message: 30/12/2012, 17h22
  3. Réponses: 3
    Dernier message: 30/10/2012, 17h51
  4. Réponses: 4
    Dernier message: 20/03/2009, 11h15
  5. [excel] Insérer l'erreur #valeur# a une chaine de caractères
    Par law56100 dans le forum Macros et VBA Excel
    Réponses: 7
    Dernier message: 23/02/2009, 14h52

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo