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 :

Problème de menu


Sujet :

C

  1. #1
    Candidat au Club
    Profil pro
    Inscrit en
    Octobre 2012
    Messages
    2
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2012
    Messages : 2
    Par défaut Problème de menu
    Bonjour à tous,

    Alors voilà j'ai un petit soucis. J'essaye de créer un programme qui déplace un paramètre sur une chaine qui fait deux fois la longueur de ce paramètre. Et à chaque déplacement de la taille d'un espace la première lettre du paramètre doit passer en dernière.

    Ex:

    hello
    elloh
    llohe
    lohel
    ohell
    hello

    Bien entendu le déplacement s'effectue sur une seule ligne. Bref pour l'instant je cherche déjà à gérer le déplacement du paramètre. Pour faire en sorte que le mot se déplace sur deux fois sa longueur. Mais à chaque fois que je compile et que j’exécute ça m'affiche segmentation fault. Je n'arrive pas à en comprendre la raison.

    Le programme est le suivant (juste pour mettre le déplacement du mot):

    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
    #include <stdlib.h>
     
    void main(int argc, char **argv)
    {
    int lengh;
    char *str;
    int lengh2;
     
    lengh = (2 * my_strlen(argv[1]));
    lengh2 = (my_strlen(argv[1]));
    str = malloc(lengh);
    my_movement(str, lengh, lengh2);
    }
     
    int my_movement(char *str, int lengh, int lengh2)
    {
    int i;
     
    i = 0;
    while(i + lengh2 < lengh)
    {
    my_putchar(' ');
    i++;
    my_putstr(str);
    }
    }
     
    void my_putstr(char *str)
    {
    while (*str != '\n')
    {
    my_putchar(*str);
    str++;
    }
    }
    Sachant que le my_putchar est forcément bon.

    Quelqu'un aurait-il une idée de mon erreur ? merci d'avance.

  2. #2
    Expert confirmé
    Avatar de diogene
    Homme Profil pro
    Enseignant Chercheur
    Inscrit en
    Juin 2005
    Messages
    5 761
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Enseignant Chercheur
    Secteur : Enseignement

    Informations forums :
    Inscription : Juin 2005
    Messages : 5 761
    Par défaut
    - Le contenu de la mémoire allouée (str) n'a pas été initialisé

    - Dans l'allocation, tenir compte du '\0' terminal si my_strlen() ne le fait pas (Si c'est un clone de strlen, le '\0' n'est pas compté).

    - Dans my_putstr() le test à '\n' est bizarre. Pourquoi pas tester avec '\0' ?

    - main() renvoie un int, pas void, dans un environnement d'exécution sous OS

  3. #3
    Candidat au Club
    Profil pro
    Inscrit en
    Octobre 2012
    Messages
    2
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2012
    Messages : 2
    Par défaut
    Tout d'abord merci pour les erreurs soulevées. Si tu me le permets je vais reprendre tes commentaires avec les observations que je viens d'en faire.

    Citation Envoyé par diogene Voir le message
    - Le contenu de la mémoire allouée (str) n'a pas été initialisé
    On initialise bien sa longueur avec le malloc, il est initialisé à 0 par défaut non ?
    Autrement si j'initialise le contenue de la mémoire en faisant un :

    '' str = argv[1] " afin d'initialiser dès le début avec le paramètre que je souhaite est-ce correcte ?

    Citation Envoyé par diogene Voir le message
    - Dans l'allocation, tenir compte du '\0' terminal si my_strlen() ne le fait pas (Si c'est un clone de strlen, le '\0' n'est pas compté).
    Donc il faudrait pour l'allocation mémoire faire 2 * longueur de argv + 1 ? ( à moins que j'ai mal compris.)

    Citation Envoyé par diogene Voir le message
    - Dans my_putstr() le test à '\n' est bizarre. Pourquoi pas tester avec '\0' ?
    Une erreur de ma part le test à 0 était en effet plus logique.

    Citation Envoyé par diogene Voir le message
    - main() renvoie un int, pas void, dans un environnement d'exécution sous OS
    J'ai changé ça mais ça ne change absolument rien ...

  4. #4
    Expert confirmé
    Avatar de diogene
    Homme Profil pro
    Enseignant Chercheur
    Inscrit en
    Juin 2005
    Messages
    5 761
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Enseignant Chercheur
    Secteur : Enseignement

    Informations forums :
    Inscription : Juin 2005
    Messages : 5 761
    Par défaut
    Autrement si j'initialise le contenue de la mémoire en faisant un :

    '' str = argv[1] " afin d'initialiser dès le début avec le paramètre que je souhaite est-ce correcte ?
    Non. Une chaine de caractères se copie avec strcpy() ou analogue. Sinon, tu copie des pointeurs, pas le contenu pointé.
    Donc il faudrait pour l'allocation mémoire faire 2 * longueur de argv + 1 ? ( à moins que j'ai mal compris.)
    Oui
    J'ai changé ça mais ça ne change absolument rien ...
    Non, c'était juste une remarque.

Discussions similaires

  1. [CSS] petit problème avec menu déroulant et frame
    Par SylvainB dans le forum Mise en page CSS
    Réponses: 1
    Dernier message: 14/02/2006, 14h54
  2. [Tableaux] Probléme Tableau / Menu
    Par carnage_59 dans le forum Langage
    Réponses: 7
    Dernier message: 13/10/2005, 13h34
  3. [HTML+CSS] Problème de menu "dynamique"
    Par Invité dans le forum Mise en page CSS
    Réponses: 2
    Dernier message: 06/04/2005, 12h48
  4. [SDK] Problème de Menu
    Par MPB dans le forum Windows
    Réponses: 6
    Dernier message: 26/01/2005, 10h59
  5. [FLASH MX2004] Problème de menu avec explorer
    Par lyne dans le forum Flash
    Réponses: 2
    Dernier message: 24/08/2004, 19h34

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