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 :

lire un tableau grace à un pointeur


Sujet :

C

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé Avatar de Linu6
    Profil pro
    Inscrit en
    Août 2007
    Messages
    227
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2007
    Messages : 227
    Par défaut lire un tableau grace à un pointeur
    Bonjour, je souhaite faire un programme qui lit le tableau t[100], depuis une fonction, qui reçoit comme argument un pointeur.

    voici le code, mais je ne sais pas ce qui cloche là-dedans
    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
    void lire (char *t);
     
    int main()
    {
    	char t[100];
     
    	lire(t);
     
    	printf("%s", t);
     
    	return 0;
    }
    void lire (char *t){
     
        while(*t=getchar()!='\n'){
     
        ++t;
        }
        return;
    }

  2. #2
    Membre Expert
    Avatar de muad'dib
    Homme Profil pro
    Développeur Java
    Inscrit en
    Janvier 2003
    Messages
    1 013
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur Java
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Janvier 2003
    Messages : 1 013
    Par défaut
    Citation Envoyé par Linu6 Voir le message
    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
    void lire (char *t);
     
    int main()
    {
    	char t[100];
     
    	lire(t);
     
    	printf("%s", t);
     
    	return 0;
    }
    void lire (char *t){
     
        while(*t=getchar()!='\n'){
     
        ++t;
        }
        return;
    }
    • la méthode getchar() permet de réaliser la lecture d'un caractère sur l'entrée standard (stdin), ce qui ne correspond pas à ce que tu veux faire, qui est de lire le contenu du tableau
    • ton tableau t n'est pas initialisé, les valeurs se trouvant à l'intérieur sont générée aléatoirement
    • la méthode printf() écrit sur la sortie standard les caractères compris dans une chaine jusqu'à rencontrer le caractère de fin de chaine '\0'. Comme ton tableau n'est pas initialisé, le comportement est indéfini
    Après avoir initialisé ton tableau à l'aide d'une boucle par exemple
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    int i;
     
    for(i = 0; i < 100; i++) t[i] = i;
    Tu pourras lire les éléments en reprogrammant la fonction lire() de cette manière
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    void lire(char *t)
    {
       int i;
     
       for(i = 0; i < 100; i++) putchar(t[i]); /* ou putchar(*(t + i)); */
    }

  3. #3
    Membre confirmé Avatar de Linu6
    Profil pro
    Inscrit en
    Août 2007
    Messages
    227
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2007
    Messages : 227
    Par défaut
    re

    j'ai élaboré cette version, mais le probleme c'est tant que je n'ai pas entré les 100 caractères, le retour chariot ne met pas fin à la lecture.

    Mais d'autre part, je ne peux faire une allocation dynamique car je ne connais pas le nombre exacte de caractère à lire.

    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
    void lire (char *t);
     
    int main()
    {
    	char t[100]={0};
    	lire(t);
    	printf("%s", t);
    	return 0;
    }
    void lire (char *t){
        int i;
        for(i=0; i<100; i++){
        *t=getchar();
        ++t;
    }
        return;
    }

  4. #4
    Membre expérimenté
    Profil pro
    Inscrit en
    Août 2007
    Messages
    190
    Détails du profil
    Informations personnelles :
    Localisation : France, Maine et Loire (Pays de la Loire)

    Informations forums :
    Inscription : Août 2007
    Messages : 190
    Par défaut
    Salut,

    Il y a plusieurs choses qui clochent dans ton programme :
    tout d'abord :

    cette ligne ne convient pas :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    while(*t=getchar()!='\n')
    il faut la remplacer par :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    while((*t=getchar())!='\n')
    Normalement ton compilateur devrait te le signaler si ce n'est pas le cas regarde ce lien :
    http://emmanuel-delahaye.developpez....tm#cfg_compilo

    De plus tu ne controles pas la taille de la saisie et donc tu peux avoir un dépassement de ton buffer et écraser les données dans la pile ce qui devrait provoquer un crash de ton programme.

    Enfin il serait bon, une fois sorti de ta boucle while de rajouter le caractère '\0' à la fin de ta chaîne.

    [EDIT]Je n'avais pas vu ton nouveau message mes remarques ne s'appliquent donc qu'à ton premier message[/EDIT]

  5. #5
    Membre confirmé Avatar de Linu6
    Profil pro
    Inscrit en
    Août 2007
    Messages
    227
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2007
    Messages : 227
    Par défaut
    mais mon probleme c'est que je sais que la taille ne peut dépasser les 100 caractères, mais si je défini la taille par

    #define DIM 100

    et ensuite je pose comme condition:

    i<DIM-1

    alors le compilateur attend de moi au moins 99 caractères.

  6. #6
    Membre expérimenté
    Profil pro
    Inscrit en
    Août 2007
    Messages
    190
    Détails du profil
    Informations personnelles :
    Localisation : France, Maine et Loire (Pays de la Loire)

    Informations forums :
    Inscription : Août 2007
    Messages : 190
    Par défaut
    Voilà un code qui doit faire ce que tu souhaites :
    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
    #include <stdio.h>
     
    #define NELEM 100
     
    void lire (char *);
     
    int main(void)
    {
    	char t[NELEM];
    	lire(t);
    	printf("%s\n", t);
    	return 0;
    }
     
    void lire (char *t)
    { 
        if(t!=NULL)
        {
        	unsigned int counter=0;
        	while(counter<NELEM-1 && (*t=getchar())!='\n')
        	{
        		++counter;
        		++t;
        	}
        	*t='\0';
        }
        return;
    }

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

Discussions similaires

  1. Lire un tableau php
    Par hunzi dans le forum XMLRAD
    Réponses: 1
    Dernier message: 26/10/2006, 09h39
  2. Réponses: 9
    Dernier message: 02/08/2006, 11h31
  3. [Tableaux] lire un tableau de requete
    Par 18Marie dans le forum Langage
    Réponses: 2
    Dernier message: 22/06/2006, 21h00
  4. Lire un fichier grace a sont schema xsd
    Par vodevil dans le forum Langage
    Réponses: 1
    Dernier message: 09/11/2005, 12h30
  5. Tableau 2 dimentions, pointeur
    Par DidierMesenbourg dans le forum C
    Réponses: 4
    Dernier message: 22/02/2005, 08h08

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