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 :

erreur de 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
    Avril 2007
    Messages
    102
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 102
    Par défaut erreur de segmentation
    bonjour a tous

    alors voila j'ai fait un programme de telle sorte que lorsque j'ai un nombre il enleve les 0 inutiles

    exemple:

    a=00120

    on aura 120

    b=023

    on aura 23

    alors voila mon code
    int main()
    {
    char *s;
    int i;

    s="001020";


    while(s[0]=='0')
    {
    for(i=0;i<strlen(s);i++)
    {

    s[i]=s[i+1];

    }
    }

    printf("%s",s);

    }

    remarque : lorsque j'ai utiliser ce code avec s en tant que tableau et non pointeur cela marcher tres bien!!

    mais je dois absolument utiliser les pointeurs

    erreur de segmentation

    si quelqu'un peut m'aider merci

  2. #2
    Membre éclairé
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    62
    Détails du profil
    Informations personnelles :
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Avril 2007
    Messages : 62
    Par défaut
    une petite remarque a la fin de ta boucle tu ne traite pas la valeur du dernier tab[i+1] si par exemple ton nombre est 00121 :
    1er for : 01211
    2ieme for : 12111 tu obtiendra ceci
    Donc deja faut retailler ta chaine de caracteres pour la nouvelle taille si tu as une variable dans la boucle while qui s'incrément par exemple et a la fin de ton while tu crés un nouveau tableau de strlen(chaine de base) - variable et tu affectes avec strncpy(nouvelle_chaine,chaine_base,taille). Autrement je ne vois pas trop pourquoi tu as se probleme a part peut etre le fait que tu n'es pas de '/0' a la fin de ta chaine donc le printf essaie d'aller voir plus loin essaie de rajouter un caractere de fin de chaine pour voir

  3. #3
    Membre éclairé
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    62
    Détails du profil
    Informations personnelles :
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Avril 2007
    Messages : 62
    Par défaut
    houhou je n'avais pas vu normale que tu es un seg fault tu n'a pas alloué la memoire avec un malloc() le tableau pas besoin d'allocvation par contre chaine de caractere il faut que tu fasses un malloc pour dans un premier temps initialiser l'adresse du pointeur de chaine puis la plage d'adresse qu'elle peut utiliser

  4. #4
    Membre émérite Avatar de crocodilex
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    697
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 697
    Par défaut
    C'est parceque tu essayes d'écrire dans une zone non modifiable.
    Ta chaine "001020" est stockée dans une zone qui n'est pas accessible en écriture.
    Il faut d'abord allouer de la mémoire (avec malloc) pour ton pointeur s
    et ensuite recopier ta chaine (avec strcpy) dans ce bloc mémoire.

  5. #5
    Membre confirmé
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    102
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 102
    Par défaut
    peut tu etre plus clair

    pour ce qui est du malloc j'ai un peu regarder
    s=malloc(20);
    puis a la fin je libere par
    free(s);

    pour ce qui est du strcpy je n'est pa compris ou tu veu en venir

    (apres avoir allouer la memoire tjs la meme erreur)

  6. #6
    Membre émérite Avatar de crocodilex
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    697
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 697
    Par défaut
    Citation Envoyé par acik59
    peut tu etre plus clair

    pour ce qui est du malloc j'ai un peu regarder
    s=malloc(20);
    puis a la fin je libere par
    free(s);

    pour ce qui est du strcpy je n'est pa compris ou tu veu en venir

    (apres avoir allouer la memoire tjs la meme erreur)
    Voilà un p'tit exemple :
    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
    #include <stdio.h>
    #include <stdlib.h>
    #include <string.h>
     
    int main(void)
    {
        char *s;
        const char *chaine = "001020";
        size_t taille;
     
        taille = strlen(chaine);
        s = malloc(taille+1);
     
        if (s == NULL)
        {
            fprintf(stderr,"Erreur malloc !!!\n");
            exit(EXIT_FAILURE);
        }
     
        while(*chaine == '0')
        {
            chaine++;
        }
     
        strcpy(s, chaine);
     
        printf("%s",s);
     
        free(s), s=NULL;
     
        return EXIT_SUCCESS;
    }

Discussions similaires

  1. Erreurs de segmentation !
    Par anti-conformiste dans le forum Applications et environnements graphiques
    Réponses: 16
    Dernier message: 18/10/2005, 11h11
  2. Erreur de segmentation
    Par Trunks dans le forum C
    Réponses: 3
    Dernier message: 06/10/2005, 18h28
  3. Erreur de segmentation (Inconnue)
    Par Dark-Meteor dans le forum C
    Réponses: 5
    Dernier message: 08/09/2005, 13h42
  4. [Dev-C++] Erreur de segmentation...
    Par sas dans le forum Dev-C++
    Réponses: 11
    Dernier message: 26/03/2005, 14h25
  5. erreur de segmentation
    Par transistor49 dans le forum C++
    Réponses: 10
    Dernier message: 15/03/2005, 11h18

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