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 :

Plusieurs problèmes C


Sujet :

C

  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Mai 2008
    Messages
    60
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2008
    Messages : 60
    Par défaut Plusieurs problèmes C
    Bonjour, j'aurais plusieurs questions à vous poser :
    1) Je créé Un fichier test.h contenant le prototype de ma fonction que j'implémente dans le fichier test.c

    Lorsque dans le main j'appelle cette fonction (j'inclue dans le main le fichier test.h) il me dit undefined reference to _mafonction

    Si j'inclue le fichier test.c dans le main ca marche...
    j'ai lu sur plusieurs sites qu'il fallait inclure les .h
    Ici il dit je cite : "Lorsque vous appelez une fonction située dans fonctions.c depuis le fichier main.c, vous aurez besoin d'inclure les prototypes de fonctions.c dans main.c. Il faudra donc mettre un #include "fonctions.h" en haut de main.c"

    Quelqu'un peut il m'éclairer ?

    2) je crée un tableau d'entier et un tableau de char contenant plusieurs mots.

    int tableau_entier[2]={1,4};
    char tableau_char[2][30]={"chaise", "maison"};

    Ainsi que deux pointeurs pointant sur chacun des tableaux :

    int *pt_int = NULL;
    char * pt_char = NULL;


    je fais une boucle for pour afficher le contenu du tableau

    for (i =0; i<=1; i++)
    {
    pt_int = &tableau_entier[i];
    pt_char = &tableau_char[i];

    printf("%d %s\n", *pt_int, pt_char);
    }
    Pourquoi ne dois-je pas mettre *pt_char sinon ca plante alors que je mets *pt_int, là je suis pas....

    3) Comment puis-je faire pour passer un tableau à deux dimensions en paramètre de fonction, car cela ne marche pas bien du tout.

    Merci d'avance pour vos réponses

  2. #2
    Invité(e)
    Invité(e)
    Par défaut
    Bonjour,
    Citation Envoyé par fleffle Voir le message
    Bonjour, j'aurais plusieurs questions à vous poser :
    1) Je créé Un fichier test.h contenant le prototype de ma fonction que j'implémente dans le fichier test.c

    Lorsque dans le main j'appelle cette fonction (j'inclue dans le main le fichier test.h) il me dit undefined reference to _mafonction

    Si j'inclue le fichier test.c dans le main ca marche...
    j'ai lu sur plusieurs sites qu'il fallait inclure les .h
    Ici il dit je cite : "Lorsque vous appelez une fonction située dans fonctions.c depuis le fichier main.c, vous aurez besoin d'inclure les prototypes de fonctions.c dans main.c. Il faudra donc mettre un #include "fonctions.h" en haut de main.c"

    Quelqu'un peut il m'éclairer ?
    La construction d'un programme se déroule en deux étapes.
    1- Compilation :
    chaque fichier .c devient un fichier .o (objet) qui contient du code exécutable.
    A ce moment là, le fichier main.o sait qu'il devra appeler la fonction toto déclarée dans test.h
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    gcc -c main.c -o main.o
    gcc -c test.c -o test.o
    2- Edition des liens :
    Les fichiers .o sont réunis en un fichier executable. C'est à ce moment là qu'on va avoir besoin de savoir exactement où est définie la fonction toto.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    gcc main.o test.o -o prog.exe
    Ces deux étapes peuvent paraitres masquée si on passe par un IDE ou si on utilise une commande de compilation unique :
    Citation Envoyé par fleffle Voir le message
    2) je crée un tableau d'entier et un tableau de char contenant plusieurs mots.

    int tableau_entier[2]={1,4};
    char tableau_char[2][30]={"chaise", "maison"};

    Ainsi que deux pointeurs pointant sur chacun des tableaux :

    int *pt_int = NULL;
    char * pt_char = NULL;


    je fais une boucle for pour afficher le contenu du tableau

    for (i =0; i<=1; i++)
    {
    pt_int = &tableau_entier[i];
    pt_char = &tableau_char[i];

    printf("%d %s\n", *pt_int, pt_char);
    }
    Pourquoi ne dois-je pas mettre *pt_char sinon ca plante alors que je mets *pt_int, là je suis pas....
    %d attend comme paramètre un entier. * pt_int est convient comme entier.
    %s attend comme paramètre une chaine de caractère. * pt_char est seulement le premier caractère de la chaine, pas une chaine.
    Je verrai plutôt ça :
    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
    #include <stdio.h>
    int main(){
       int i;
       int tableau_entier[2]={1,4};
       char tableau_char[2][30]={"chaise", "maison"};
       
       int *pt_int = NULL;
       char ** pt_char = NULL;
       
       for (i =0; i<=1; i++)
       {
          pt_int = &tableau_entier[i];
          pt_char = &tableau_char[i];
    
          printf("%d %s\n", *pt_int, *pt_char);
       }
       return 0;
    }
    Citation Envoyé par fleffle Voir le message
    3) Comment puis-je faire pour passer un tableau à deux dimensions en paramètre de fonction, car cela ne marche pas bien du tout.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    void f(int ** tableau2D, int largeur, int hauteur){
       int i,j;
       for(i = 0; i < largeur; ++i){
          for(j = 0; j < hauteur; ++j){
             printf("%d ", tableau2D[i][j]);
          }
          printf("\n");
       }
    }
    Dernière modification par E.Bzz ; 28/09/2010 à 10h45.

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Mai 2008
    Messages
    60
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2008
    Messages : 60
    Par défaut
    j'ai résolu ma première quesion en cochant debug et release dans les propriétés du fichier (IDE codeblock) mais je ne comprends toujours pas.

  4. #4
    Membre averti
    Profil pro
    Inscrit en
    Mai 2008
    Messages
    60
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2008
    Messages : 60
    Par défaut
    Merci pour ta réponse, j'ai écrit mon deuxième message avant d'avoir vu la tienne. je m'y plonge

  5. #5
    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
    Comment puis-je faire pour passer un tableau à deux dimensions en paramètre de fonction, car cela ne marche pas bien du tout.
    mabu :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    void f(int ** tableau2D, int largeur, int hauteur){....
    tableau2D ici n'est pas un tableau à 2 dimensions, mais un tableau (à une dimension) de pointeurs sur int.
    Cette fonction ne peut pas être appelée par
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
      int tableau[2][30];
    ....  
      f(tableau,.....);

  6. #6
    Invité(e)
    Invité(e)
    Par défaut
    Mea culpa.

    Je n'ai pas l'habitude de travailler avec des tableau statiques.

Discussions similaires

  1. [C++ DX9] Plusieurs problêmes (rendu de point et picking)
    Par caparenlive59 dans le forum DirectX
    Réponses: 5
    Dernier message: 13/07/2007, 16h20
  2. Réponses: 8
    Dernier message: 26/06/2007, 17h07
  3. Réponses: 3
    Dernier message: 27/04/2007, 10h29
  4. Réponses: 3
    Dernier message: 14/01/2007, 19h54
  5. Mon Outil de gestion (plusieurs problèmes)
    Par Makaveli33 dans le forum Access
    Réponses: 10
    Dernier message: 11/05/2006, 21h42

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