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 char* (avec le sizeof d'un char[])


Sujet :

C

  1. #1
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    47
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Novembre 2006
    Messages : 47
    Points : 36
    Points
    36
    Par défaut malloc sur char* (avec le sizeof d'un char[])
    Bonjour à tous,

    j'initialise un char[] puis je veux allouer un char* avec le même nombre de caractère...mais la taille du char* n'est pas la même que celle du char[]

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    #include <stdio.h>
    #include <stdlib.h>
     
    int main(int argc, char *argv[]) {
     
    	char mot_1[] = "HELLOWORLD";
    	char *mot_2 = malloc(sizeof(mot_1));
     
    	printf("Taille mot 1 : %d\n", sizeof(mot_1));
    	printf("Taille mot 2 : %d\n", sizeof(mot_2));
     
    	return 0;
    }
    Résultat
    -----------
    Taille mot 1 : 11
    Taille mot 2 : 4


    Qu' ai-je loupé ?

    Merci

  2. #2
    Membre chevronné
    Profil pro
    Inscrit en
    Août 2006
    Messages
    1 104
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2006
    Messages : 1 104
    Points : 1 750
    Points
    1 750
    Par défaut
    La première valeur, c'est la taille du tableau. La seconde, c'est la taille du pointeur. Un pointeur n'est pas un tableau.

    Pour connaitre la taille d'une chaine, il faut utiliser la fonction strlen. Le '\0', qui termine la chaîne, n'est pas compté par la fonction. Pour allouer une zone mémoire afin d'y copier un tableau, il faut donc ajouter 1 pour la taille à allouer.

    Dans ton exemple, vu que tu ne donne pas la taille du tableau, le compilateur lui donne une taille implicite, correspondant à la longueur de ta chaine, ajoutée de 1 (à cause de '\0').
    Si par exemple, tu avais réservé un tableau mot_1 de 50 caractères, alors mot_2 aurait pointé sur une zone de mémoire de 50 caractères également, même si la chaine contenue dans le premier tableau ne fait en fait que 10 caractères ( + le '\0').

    Il faut bien comprendre la différence entre strlen et sizeof. Ce sont deux choses différentes.
    Par sécurité, lorsqu'il s'agit de calculer la taille d'une chaine afin de connaitre la taille de mémoire à allouer afin d'effectuer une copie, il est préférable d'utiliser strlen. Il ne faut pas oublier d'ajouter 1 à la taille.

  3. #3
    Rédacteur

    Avatar de ram-0000
    Homme Profil pro
    Consultant en sécurité
    Inscrit en
    Mai 2007
    Messages
    11 517
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Consultant en sécurité
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mai 2007
    Messages : 11 517
    Points : 50 367
    Points
    50 367
    Par défaut
    Citation Envoyé par jeroman Voir le message
    Il faut bien comprendre la différence entre strlen et sizeof. Ce sont deux choses différentes.
    D'ailleurs, c'est tellement différents que les valeurs sont évaluées à différents moments

    sizeof() est évalué par le compilateur lors de la compilation du programme, strlen() est évalué par une fonction C lors de l'exécution du programme.
    Raymond
    Vous souhaitez participer à la rubrique Réseaux ? Contactez-moi

    Cafuro Cafuro est un outil SNMP dont le but est d'aider les administrateurs système et réseau à configurer leurs équipements SNMP réseau.
    e-verbe Un logiciel de conjugaison des verbes de la langue française.

    Ma page personnelle sur DVP
    .

Discussions similaires

  1. Probleme avec malloc sur tableau de chaine
    Par grex1 dans le forum C
    Réponses: 2
    Dernier message: 12/09/2010, 23h36
  2. Réponses: 5
    Dernier message: 10/06/2009, 12h01
  3. Aide sur une selection de chaine de char avec une souris
    Par Baharroth dans le forum AWT/Swing
    Réponses: 2
    Dernier message: 15/11/2006, 22h17
  4. Construire chemin sur bouton avec évt Javascript
    Par Ph. B. dans le forum XMLRAD
    Réponses: 4
    Dernier message: 27/05/2003, 11h26

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