Rechercher : dans
Par :

Taille d'une variable en C

Dernière réponse le 12 mai 2004 à 14:10:31 Mathilde, le 12 mai 2004 à 13:26:09 
 Signaler ce message aux modérateurs

Bonjour,

Pouvez-vous m'aider s'il vous plaît ?
Je voudrais connaitre la taille d'un char *

Je sais que pour une variable du type char [taille], on peut récupérer la taille en faisant un sizeof.
Par contre, pour un char *, je ne sais pas.
J'avais pensé faire un malloc, puis un sizeof :
char * toto;
toto=(char *)malloc(20);
Mais cela ne me retourne pas 20 mais 4 quelque soit le nombre passé en paramètre du malloc.

Pour info, je travaille sur les systèmes d'exploitation Unix et Linux.

J'avais pensé également au strlen mais il ne me retourne pas ce que je veux.

J'espère avoir été assez claire et surtout qu'il existe une solution à mon problème.

Merci de votre aide.

Mathilde

Meilleures réponses pour « Taille d'une variable en C » dans :
Introduction à la STL en C++ (standard template library) VoirIntroduction Principales classes de la STL std::pair std::list std::vector std::set std::map Les iterators iterator et const_iterator reverse_iterator et const_reverse_iterator Les algorithmes ...
Langage C - Les variables VoirLe concept de variable Une variable est un objet repéré par son nom, pouvant contenir des données, qui pourront être modifiées lors de l'exécution du programme. Les variables en langage C sont typées, c'est-à-dire que les données contenues dans...
Langage C++ - Les variables VoirLe concept de variable Une variable est un objet repéré par son nom, pouvant contenir des données, qui pourront être modifiées lors de l'exécution du programme. Les variables en langage C++ sont typées, c'est-à-dire que les données contenues dans...
Langage C - Les types de données VoirLes types de données Les données manipulées en langage C sont typées, c'est-à-dire que pour chaque donnée que l'on utilise (dans les variables par exemple) il faut préciser le type de donnée, ce qui permet de connaître l'occupation mémoire (le...

1

Fada09, le 12 mai 2004 à 13:31:35
  • +1

Salut,

Bon je me rappelle plus sous Linux comment sont représentées les données mais 4 semble le bon chiffre.
En effet tu veut récuperer la taille d'un pointeur (c'est à dire une adresse = un entier).
Donc que tu fasses un pointeur sur un entier, un tableau de caractère, ou même une structure plus complexe ton pointeur sera toujours un entier (donc 4octets).

Voila j'espere que je t'ai aidé
A bientot.

;-)
~ ~ Fada ~ ~ : Member of Star!alco

Répondre à Fada09

2

Mathilde, le 12 mai 2004 à 13:44:25

Merci.

Mais puis-je récupérer le chiffre passé en paramètre du malloc grâce à une commande comme je le ferais pour un char[taille] par exemple ?

Merci encore.

Mathilde

Répondre à Mathilde

3

JSS, le 12 mai 2004 à 13:51:04

Bonjour ou Bonsoir,

Si tu veux recuperer la taille de ton mot et non pas la taille d'un pointeur strlen doit marcher.
D'apres mes souvenirs quelques precautions :
1 trouver dans quel include est mis la fonction. je ne sais plus si c'est de base mais il me semble que #include <string.h> ou #include <ctype.h> devrait etre bon.
2 il me semble qu'il y a juste une difference de plus ou moins 1 dans la taille d'un mot (je sais plus si il compte le '\0' ou non).

Good luck.

JSS

Répondre à JSS

4

Nico, le 12 mai 2004 à 14:09:01

Yop,

ben en fait quand tu fais un malloc essaye plutot :

char *toto;
toto = (char *)malloc(sizeof(char));

Au moins tu devrais avoir la taille d'un caractère.

++

Nico

Répondre à Nico

5

 blurk, le 12 mai 2004 à 14:10:31

Hello!

sizeof (toto) renvoie la taille du pointeur sur char
(4 octets, soit 32 bits, soit 2^32 octets d'adressage)
sizeof(*toto) renvoie la taille d'un caractere (1 octet)
car sizeof ne compte pas les caracteres jusqu'au zéro terminal
et que la taille d'un type de variable n'est pas un nombre d'éléments. char * est un type, pas un espace mémoire.
strlen (toto) renvoie la taille de la chaine de caracteres (pas 20, car il ignore la taille allouée et compte les caractères jusqu'au 0).
Le C est un language système, son compilateur ne rajoute pas de
code pour contôler les espaces mémoire alloués, ce qui empêcherait d'avoir un contrôle total de ce qui est compilé, ralentirait le code et augmenterait sa taille (c'est anti C).
il n'y a rien qui retournera 20

voilà le seul moyen de récupérer la taille allouée :
int i=20;
char *toto;
if ( (toto =(char *) malloc(i))==null) i=0;

//cordialement

Répondre à blurk
Collection CommentÇaMarche.net