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 :

malloc sur tableau de chaine


Sujet :

C

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    52
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 52
    Par défaut malloc sur tableau de chaine
    Salut,

    Je cherche comment allouer un tableau de chaine de charactere manuellement,

    pour un parseur de dossier, je voudrais récupérer chaque nom de fichier puis
    le mémoriser dans un tableau afin pouvoir faire des comparaison entre deux fichiers plus facilement.

    Le principe final du soft sera de supprimer les doublons de fichier dans un dossier tout d'abord en utilisant la taille en bit comme élément de comparaison puis évoluer vers md5.

    donc je crée mon pointeur de tableau de chaine avec longueur de chaine fixe
    char *sTab[256]
    puis j'alloue le nombre de chaines du tableau en fonction du nombre de fichiers contenu dans le dossier.

    sTab[256] = malloc( sizeof(char) * nbr_files);

    est-ce la bonne méthode d'allocation?



    Merci

  2. #2
    Expert confirmé
    Avatar de Thierry Chappuis
    Homme Profil pro
    Enseignant Chercheur
    Inscrit en
    Mai 2005
    Messages
    3 499
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : Suisse

    Informations professionnelles :
    Activité : Enseignant Chercheur
    Secteur : Industrie Pharmaceutique

    Informations forums :
    Inscription : Mai 2005
    Messages : 3 499
    Par défaut
    Citation Envoyé par ishikawa
    Salut,

    Je cherche comment allouer un tableau de chaine de charactere manuellement,

    pour un parseur de dossier, je voudrais récupérer chaque nom de fichier puis
    le mémoriser dans un tableau afin pouvoir faire des comparaison entre deux fichiers plus facilement.

    Le principe final du soft sera de supprimer les doublons de fichier dans un dossier tout d'abord en utilisant la taille en bit comme élément de comparaison puis évoluer vers md5.

    donc je crée mon pointeur de tableau de chaine avec longueur de chaine fixe

    puis j'alloue le nombre de chaines du tableau en fonction du nombre de fichiers contenu dans le dossier.

    sTab[256] = malloc( sizeof(char) * nbr_files);

    est-ce la bonne méthode d'allocation?



    Merci
    Le problème est qu'ici, tu déclares un tableau de 256 pointeurs sur char, alors que tu sembles (si j'ai bien compris ta question) vouloir la chose suivante:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    /* pointeur sur un tableau de 256 chars */
    char (*sTab)[256] = NULL;
    L'allocation se passe alors comme suit:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    sTab = malloc(nbr_files * sizeof *sTab);
    if (sTab != NULL)
    {
        /* Le reste du code... */
     
        /* On n'oublie pas de libérer la mémoire allouée */
        free(sTab), sTab = NULL;
    }
    else
    {
        fprintf(stderr, "Erreur d'allocation! Mémoire insuffisante...");
    }
    Thierry
    "The most important thing in the kitchen is the waste paper basket and it needs to be centrally located.", Donald Knuth
    "If the only tool you have is a hammer, every problem looks like a nail.", probably Abraham Maslow

    FAQ-Python FAQ-C FAQ-C++

    +

  3. #3
    Membre émérite
    Inscrit en
    Juillet 2005
    Messages
    512
    Détails du profil
    Informations forums :
    Inscription : Juillet 2005
    Messages : 512
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    sTab = malloc(nbr_files * sizeof *sTab);
    Ici tu alloues de l'espace pour un tableau de nbr_files pointeurs. ça ne correspond pas à la déclaration.

    Moi j'aurais fait :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    sTab = malloc(nbr_files * sizeof(char[256]));
    (La déclaration est un pointeur sur des tableaux de 256 char).

  4. #4
    Expert éminent
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 395
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France

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

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 395
    Par défaut
    Lucien63 : Avec sTab de type char (*)[256], je ne suis pas sûr que tu aies raison...
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

  5. #5
    Membre émérite
    Inscrit en
    Juillet 2005
    Messages
    512
    Détails du profil
    Informations forums :
    Inscription : Juillet 2005
    Messages : 512
    Par défaut
    Citation Envoyé par Médinoc
    Lucien63 : Avec sTab de type char (*)[256], je ne suis pas sûr que tu aies raison...
    Peut-être je me trompe !
    mais char (*)[256] est bien un pointeur sur des tableaux char[256]

    Alors tu l'alloue comment l'espace pour ces tableaux ?

    (je ne pense pas que la taille d'un pointeur suffise pour allouer l'espace pour un tableau)

  6. #6
    Expert éminent
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 395
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France

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

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 395
    Par défaut
    sTab est de type char (*)[256], donc *sTab est de type char [256].

    Pour le sizeof, c'est la même chose que si tu faisais:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    char a[256];
    printf("%d\n", (int)sizeof a);
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

  7. #7
    Expert confirmé
    Avatar de Thierry Chappuis
    Homme Profil pro
    Enseignant Chercheur
    Inscrit en
    Mai 2005
    Messages
    3 499
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : Suisse

    Informations professionnelles :
    Activité : Enseignant Chercheur
    Secteur : Industrie Pharmaceutique

    Informations forums :
    Inscription : Mai 2005
    Messages : 3 499
    Par défaut
    Citation Envoyé par Lucien63
    Peut-être je me trompe !
    mais char (*)[256] est bien un pointeur sur des tableaux char[256]

    Alors tu l'alloue comment l'espace pour ces tableaux ?

    (je ne pense pas que la taille d'un pointeur suffise pour allouer l'espace pour un tableau)
    Il me semble avoir donné un exemple plus haut... http://www.developpez.net/forums/sho...14&postcount=2

    [Edit] Par ailleurs, pour passer un tel tableau en paramètre d'une fonction, on fait la déclaration suivante:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    void fonction(char (*tab)[256));
    et pour déclarer une fonction qui retourne ce type de pointeurs, on utilise le prototype suivant (c'est assez amusant):
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    char (*fonction(void))[256];
    Thierry
    "The most important thing in the kitchen is the waste paper basket and it needs to be centrally located.", Donald Knuth
    "If the only tool you have is a hammer, every problem looks like a nail.", probably Abraham Maslow

    FAQ-Python FAQ-C FAQ-C++

    +

Discussions similaires

  1. Traitement sur un tableau de chaines de caratères
    Par Anduriel dans le forum MATLAB
    Réponses: 3
    Dernier message: 02/08/2011, 12h26
  2. Probleme avec malloc sur tableau de chaine
    Par grex1 dans le forum C
    Réponses: 2
    Dernier message: 12/09/2010, 22h36
  3. malloc tableau de chaines de caractères
    Par Yunchi dans le forum Débuter
    Réponses: 8
    Dernier message: 08/04/2009, 11h06
  4. Malloc tableau de chaine de caractere
    Par firemax dans le forum C
    Réponses: 14
    Dernier message: 05/11/2007, 15h23
  5. Malloc sur tableau
    Par oranoutan dans le forum Débuter
    Réponses: 3
    Dernier message: 09/10/2007, 17h58

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