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 :

probleme avec les pointeurs


Sujet :

C

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Femme Profil pro
    Inscrit en
    Juin 2010
    Messages
    10
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Algérie

    Informations forums :
    Inscription : Juin 2010
    Messages : 10
    Par défaut probleme avec les pointeurs
    salam;
    voila, j'ai un petie probleme avec les pointeur , je voudrais tout simplement lire et ecrire une chaine de caractere déclarer avec les pointeur, voisci mon code qui m'affiche" Exception non gérée à 0x00411403 dans essaie.exe*: 0xC0000005: Violation d'accès lors de la lecture de l'emplacement 0xcccccc00.," merci d'avance
    désolé j'avais oublié les balises

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    #include<stdio.h>
    #include<stdlib.h>
    main()
    {
    	char* nom;
    	printf("nom:	");
    	scanf_s("%s",&nom);
    	printf("%s",*nom);
    }

  2. #2
    Responsable 2D/3D/Jeux


    Avatar de LittleWhite
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mai 2008
    Messages
    27 119
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Mai 2008
    Messages : 27 119
    Billets dans le blog
    148
    Par défaut
    Bonjour,

    Je vous conseille vivement de lire un cours de C, sur les pointeurs .

    Maintenant, votre code à plusieurs problèmes.

    Première chose:
    Ceci est bien beau, cela dit, je veux un pointeur sur un char*. Le problème c'est que pour le moment il ne pointeur sur rien. Je vous conseille vivement ( et pour la suite ) de toujours initialisé ( donner une valeur ) à toute variable que vous déclaré.
    ( Pour ce case:
    Code c : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    char* nom = NULL; // Ça a l'avantage d'être très clair :D ça pointe sur rien
    Maintenant, comme cela pointe sur rien, vous ne pouvez pas utiliser l'endroit pointé. Donc il va falloir demander au système un peu d'espace mémoire que l'on pourra utilisé dans notre programme.
    Pour ce faire, nous avons deux commandes:
    malloc
    calloc
    La documentation se trouve ici: http://man.developpez.com/man3/free.3.php

    Donc malloc tout comme calloc va demandé de la mémoire à notre système. Celui ci , si possible va nous retourner un pointeur sur cette mémoire nouvellement alloué.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    nom = (char*) malloc(sizeof(char) * 100);
    Dans mon code, je demande 100 * la taille d'un char. Je met le pointeur sur cette espace dans nom.
    Comme le malloc tout comme le calloc peuvent échouer, je vérifie si mon pointeur est correct. Effectivement, lors de l'échec de telles fonctions ( car cela arrive, il ne faut jamais l'oublier ), la valeur retourné est NULL.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    if ( nom == NULL )
    {
         printf("Echec d'allocation de la mémoire\n"); // On indique à l'utilisateur que nous avons eu un problème
         return -1; // On quitte le programme
    }
    Maintenant que nous avons fait tout cela, nous avons un tableau dynamique de 100 char utilisable.
    On l'utilise comme dans votre code:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    printf("nom:	");
    scanf_s("%s",nom);
    printf("%s",nom);
    Remarquer que j'ai apporter des changement. Effectivement, scanf pour remplir les variable il demande des pointeurs, notre nom est déjà un pointeur, donc on écrit tel quel.
    Printf lors de l'utilisation du format '%s' demande aussi un pointeur ... donc on utilise 'nom' aussi tel quel.
    Maintenant, si vous voulez, vous pouvez vous imaginer un pointeur comme une flèche qui pointe sur de la mémoire.
    Une chaine de caractère, ce n'est qu'une flèche qui pointe sur l'espace mémoire qui contient le premier caractère. ( Au début, faites vous des schéma avec des rangés de cases et des flèches ( d'ailleurs je le fait toujours, donc ce n'est pas pour rien ) ).
    Lorsque l'on écrit ceci:
    Cela indique que l'on veut la valeur sous notre flèche. ( Soit la valeur pointé par la pointeur ). Dans notre cas, c'est le premier caractère et c'est un char.
    Lorsque nous faisons ceci:
    Cela indique que nous voulons le pointeur sur l'espace mémoire qui contient nom. Dans notre cas, c'est un pointeur,sur notre pointeur ... Donc une flèche sur notre flèche.
    Théoriquement, ce cas est un peu plus difficile à comprendre mais prennons l'exemple suivant:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    int i = 42;
    int* pi = &i;
    'i' est un espace en mémoire qui contient 42. Nous n'avons pas l'adresse, mais nous avons son nom ( qui est 'i' ).
    &i, indique au compilateur que nous voulons un pointeur sur notre espace mémoire qui contient 42. Du coup, cela nous donne un pointeur sur un int . Si on fait *pi , on obtient 42

    Fin de notre programme:

    Cette partie est aussi ultra importante. C'est bien beau de demandé à notre système d'allouer de la mémoire, en plus nous avons des systèmes super sympas qui nous donne la mémoire , tout ça grace à malloc et calloc, mais bon, il faut penser à rendre la mémoire à notre système ( car nous sommes gentils ).
    Pour ce faire, nous utilisons la commande free().
    Celle ci accepte un pointeur, est dit au système: "Tiens je n'ai plus besoin de cette mémoire, tu peux la reprendre". Et après ça, tout le monde est content.
    Donc nous avons fini d'utiliser nom, donc nous pouvons libéré ( ou rendre ) la mémoire:
    Et maintenant, vous avez un programme tout propre qui fonctionne .
    Vous souhaitez participer à la rubrique 2D/3D/Jeux ? Contactez-moi

    Ma page sur DVP
    Mon Portfolio

    Qui connaît l'erreur, connaît la solution.

  3. #3
    Membre averti
    Inscrit en
    Juin 2010
    Messages
    39
    Détails du profil
    Informations forums :
    Inscription : Juin 2010
    Messages : 39
    Par défaut re
    je pense que vous avez aussi oubliez d'utiliser la librairie 'string.h' qui contient les commandes responsables du traitement des chaines vu que t'as employé "%S"

  4. #4
    Membre éprouvé Avatar de Flow_75
    Femme Profil pro
    Ingénieure
    Inscrit en
    Mai 2005
    Messages
    1 100
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 42
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieure
    Secteur : Transports

    Informations forums :
    Inscription : Mai 2005
    Messages : 1 100
    Par défaut
    Citation Envoyé par dj wael Voir le message
    je pense que vous avez aussi oubliez d'utiliser la librairie 'string.h' qui contient les commandes responsables du traitement des chaines vu que t'as employé "%S"
    pas besoin.
    quand tu parles de 'commandes responsables du traitement des chaines", c'est strlen, strcmp, strcpy, ...

    quand tu employes le "%s" dans un printf, tu n'as pas besoin d'ajouter d'include à part celui pour le printf.


Discussions similaires

  1. un 'petit' probleme avec les pointeurs
    Par gss3000 dans le forum C++
    Réponses: 4
    Dernier message: 04/01/2010, 15h39
  2. Problem avec les pointeurs
    Par Pellodu21 dans le forum C++
    Réponses: 4
    Dernier message: 28/10/2007, 00h37
  3. Réponses: 27
    Dernier message: 24/05/2007, 23h29
  4. problem avec les pointeurs
    Par Halloula dans le forum C
    Réponses: 3
    Dernier message: 22/01/2007, 16h54
  5. [Débutant] Probleme avec les pointeurs
    Par amira dans le forum C
    Réponses: 14
    Dernier message: 04/12/2006, 14h27

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