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 :

récupérer un char*


Sujet :

C

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre très actif
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2011
    Messages
    317
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Meuse (Lorraine)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2011
    Messages : 317
    Par défaut récupérer un char*
    bonjour,
    je veux déclarer une chaine et la récupérer voici mon programme

    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
     
    int main()
    {
            char* str1;
            char* str2;
     
           printf("donner la chaine 1 :  ");
            scanf("%s",str1);
            printf("la chaine 1 :  %s\n",str1);
     
            printf("donner la chaine 2 :  ");
            scanf("%s",str2);
            printf("la chaine 2 :  %s\n",str2);
     
               return 0;
    }
    je veux qu'il soit char* car je vais le passer en paramètre dans une fonction
    merci

  2. #2
    Expert confirmé

    Inscrit en
    Août 2006
    Messages
    3 966
    Détails du profil
    Informations forums :
    Inscription : Août 2006
    Messages : 3 966
    Par défaut
    Lea,

    Pour commencer, il faut réserver de la mémoire pour les chaînes str1 et str2 : la déclaration d'un pointeur ne réserve pas de place pour les données sur lesquelles il pointera.

  3. #3
    Rédacteur
    Avatar de Franck.H
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Janvier 2004
    Messages
    6 951
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Haut Rhin (Alsace)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Service public

    Informations forums :
    Inscription : Janvier 2004
    Messages : 6 951
    Par défaut
    Deux solutions s'ouvrent à toi:

    1 : Utilisation de tableaux statiques
    Rien ne t'empêche dans ton programme, d'utiliser des tableaux statiques:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    char str1 [TAB_SIZE];
    char str2 [TAB_SIZE];
    étant une constante symbolique genre:
    qui définie la taille de tes chaînes. Simple à mettre en oeuvre mais impossible à redimensionner si tu veux des chaînes de plus grande tailles par la suite (ou plus petites) mais rien ne t'empêche de les passer à une fonction comme ceci:
    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
    #include <stdio.h>
    #include <stdlib.h>
    #include <string.h>
     
    #define TAB_SIZE 80
     
    void afficher_chaine (const char * p)
    {
       printf ("%s\n", p);
    }
     
    int main (void)
    {
       char str1 [TAB_SIZE];
     
       strcpy (str1, "Bienvenue sur developpez.com !");
       afficher_chaine (str1);
     
       return EXIT_SUCCESS;
    }
    2 : Allocation dynamique
    Là il faut allouer toi même l'espace que doit avoir tes chaînes donc leur taille soit si je reprend l'exemple précédent:
    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
    #include <stdio.h>
    #include <stdlib.h>
    #include <string.h>
     
    #define TAB_SIZE 80
     
    void afficher_chaine (const char * p)
    {
       printf ("%s\n", p);
    }
     
    int main (void)
    {
       char * str1 = malloc (TAB_SIZE);
     
       if (str1)
       {
          strcpy (str1, "Bienvenue sur developpez.com !");
          afficher_chaine (str1);
          free (str1);
       }
     
       return EXIT_SUCCESS;
    }
    Sans bien sûr, ne pas oublier de libérer l'espace ainsi allouer, ce que fait la fonction free ()

    Si je peut te donner un conseil, tu ferais bien de lire un cours pour apprendre le C car ça, c'est les bases que tout débutant apprend à un moment donné dans un livre ou un tutoriel: http://melem.developpez.com/tutoriel...ion-langage-c/

    Mon Site
    Ma bibliothèque de gestion des chaînes de caractères en C

    L'imagination est plus importante que le savoir. A. Einstein

    Je ne répond à aucune question technique par MP, merci d'avance !

  4. #4
    Membre très actif
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2011
    Messages
    317
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Meuse (Lorraine)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2011
    Messages : 317
    Par défaut
    oui mais le problème ici c'est que str1 et str2 seront passer en paramètres dans une autre fonction.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    LCS(char* str1,char* str2);
    quand je déclare avec je peux pas les passer en paramètres

  5. #5
    Rédacteur
    Avatar de Franck.H
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Janvier 2004
    Messages
    6 951
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Haut Rhin (Alsace)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Service public

    Informations forums :
    Inscription : Janvier 2004
    Messages : 6 951
    Par défaut
    Bin si tu peux, c'est bel et bien ce que j'ai fait dans le premier exemple. Sinon tu prend le second exemple ou tu montre le code complet si ce n'est pas trop long.
    Mon Site
    Ma bibliothèque de gestion des chaînes de caractères en C

    L'imagination est plus importante que le savoir. A. Einstein

    Je ne répond à aucune question technique par MP, merci d'avance !

  6. #6
    Responsable Systèmes


    Homme Profil pro
    Gestion de parcs informatique
    Inscrit en
    Août 2011
    Messages
    18 255
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Gestion de parcs informatique
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Août 2011
    Messages : 18 255
    Par défaut chaine
    Ca sent les segfault à plein nez ....

    En C les chaines de caractères n'existe pas vraiment, en fait les chaines sont des tableaux de char. La fin d'une chaine est repérée par les fonctions de la libc par le char \0.

    Ca devient vite dangereux si tu fait n'importe quoi.

    Une chaine a donc une taille limite non modifiable, si tu dépasses cette taille, tu vas écraser des données

    lis ce tuto :
    http://nicolasj.developpez.com/articles/libc/string/
    Ma page sur developpez.com : http://chrtophe.developpez.com/ (avec mes articles)
    Mon article sur le P2V, mon article sur le cloud
    Consultez nos FAQ : Windows, Linux, Virtualisation

Discussions similaires

  1. récupérer un char au clavier
    Par artemis93 dans le forum Débuter avec Java
    Réponses: 2
    Dernier message: 07/05/2013, 10h41
  2. Réponses: 20
    Dernier message: 02/04/2010, 11h02
  3. Récupérer un char 3 étoiles et un double 2 étoiles d'une DLL en VBA ?
    Par beafrancky dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 30/06/2009, 17h10
  4. Réponses: 4
    Dernier message: 26/05/2006, 19h02
  5. récupérer une partie d'un char*
    Par r0d dans le forum C
    Réponses: 5
    Dernier message: 10/11/2005, 14h14

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