Error get array size
Bonjour,
Je cherche des réponses sur l'obtention de la taille d'un tableau de caractères. Voici mon code:
À la compilation :
Cette erreur vient lorsque j'essaye de récupérer la taille de mon tableau et je n'arrive pas a corriger ce problème.
Merci pour le personnes qui prendront le temps de m'aider :-).
Je cherche des réponses sur l'obtention de la taille d'un tableau de caractères. Voici mon code:
#define MAX_NAME_CHAR 25
#define MAX_TEL_CHAR 10
typedef struct profile
{
signed char name[MAX_NAME_CHAR];
signed char tel[MAX_TEL_CHAR];
} profil;
void print_rep(profil myRep[]);
int main(int argc, char *argv[])
{
profil myRep[1];
return 1;
}
void print_rep(profil myRep[])
{
int s1, s2, size;
s1 = sizeof(myRep);
s2 = sizeof(myRep[0]);
size = s1 / s2;
return;
}
À la compilation :
exercice.c:31:20: warning: 'sizeof' on array function parameter 'myRep' will return size of 'profil *' {aka 'struct profile *'} [-Wsizeof-array-argument]
31 | s1 = sizeof(myRep);
| ^
exercice.c:27:23: note: declared here
27 | void print_rep(profil myRep[])
Cette erreur vient lorsque j'essaye de récupérer la taille de mon tableau et je n'arrive pas a corriger ce problème.
Merci pour le personnes qui prendront le temps de m'aider :-).
A voir également:
- Error get array size
- Get data back - Télécharger - Récupération de données
- 552 size limit exceeded ✓ - Forum Réseaux sociaux
- Wmic path softwarelicensingservice get oa3xoriginalproductkey - Forum Windows 10
- Recuperer la clé de produit windows - Forum Windows Vista
- Eespt technical error ✓ - Forum TNT / Satellite / Réception
3 réponses
Bonjour,
En fait, une fonction ne peut pas recevoir en paramètre un tableau.
Quand tu écris
Si tu fais tes
Le seul moyen de transmettre la taille, c'est d'utiliser un paramètre supplémentaire pour la transmettre à la fonction.
En fait, une fonction ne peut pas recevoir en paramètre un tableau.
Quand tu écris
print_rep(profil myRep[]), en fait la fonction ne reçoit par un tableau mais un pointeur sur son premier élément, c'est équivalent à
print_rep(profil *myRep). Un pointeur s'utilise comme un tableau, et on ne s'en rend pas compte.
Si tu fais tes
sizeofdans
main(), ils auront les bonnes valeurs car dans
main(), c'est bien un tableau.
Le seul moyen de transmettre la taille, c'est d'utiliser un paramètre supplémentaire pour la transmettre à la fonction.
Merci beaucoup pour votre aide. J'ai passé le contenu de la fonction dans le
Bonne journée
mainet cela marche parfaitement.
Bonne journée
yg_be
Messages postés
24281
Date d'inscription
Statut
Contributeur
Dernière intervention
Ambassadeur
1 585
bonjour,
il me semble que le message n'est qu'un avertissement.
quelle valeur obtiens-tu pour la variable
tu écris vouloir obtenir la taille d'un tableau de caractères. en quelle unité veux-tu l'obtenir? que vas-tu faire avec cette taille?
il me semble que le message n'est qu'un avertissement.
quelle valeur obtiens-tu pour la variable
size?
tu écris vouloir obtenir la taille d'un tableau de caractères. en quelle unité veux-tu l'obtenir? que vas-tu faire avec cette taille?
Bonjour,
Les messages sont effectivement sont effectivement juste des avertissements, qui indique la taille récupérée n'est pas la place (en octet) occupée par le tableau mais la taille du pointeur et donc probablement une erreur de programmation. En effet, comme la taille du pointeur ne dépend pas de la taille du tableau (il fait toujours la taille d'une adresse de mémoire, e.g. 64 bits sur une architecture 64 bits), cet avertissement signifie que le
C'est pourquoi comme le dit Dalfab, il faut souvent passer à une fonction qui manipule un tableau le nombre d'éléments stockés dans le tableau et ainsi lui signifie jusqu'où elle peut le lire, car le pointeur seul ne véhicule pas la taille du bloc mémoire pointé. Personnellement je recommande de n'utiliser dans des fonctions que l'utilisation de pointeurs (sans oublier de préciser
Tu écris vouloir obtenir la taille d'un tableau de caractères. en quelle unité veux-tu l'obtenir ? Que vas-tu faire avec cette taille ?
Je pense qu'hadrien c'est un peu mélangé les pinceaux au moment d'écrire son message. Dans le code qu'il partage l23 dans le message #1, on voit que l'objectif semblait être de calculer le nombre de
Les messages sont effectivement sont effectivement juste des avertissements, qui indique la taille récupérée n'est pas la place (en octet) occupée par le tableau mais la taille du pointeur et donc probablement une erreur de programmation. En effet, comme la taille du pointeur ne dépend pas de la taille du tableau (il fait toujours la taille d'une adresse de mémoire, e.g. 64 bits sur une architecture 64 bits), cet avertissement signifie que le
sizeofincriminé a un intérêt limité...
C'est pourquoi comme le dit Dalfab, il faut souvent passer à une fonction qui manipule un tableau le nombre d'éléments stockés dans le tableau et ainsi lui signifie jusqu'où elle peut le lire, car le pointeur seul ne véhicule pas la taille du bloc mémoire pointé. Personnellement je recommande de n'utiliser dans des fonctions que l'utilisation de pointeurs (sans oublier de préciser
constsi c'est accès en lecture seule).
#include <stdio.h>
void print_tab(const int * tab, size_t num_elements) {
for (size_t i = 0; i < num_elements; i++) {
printf("%d\n", tab[i]);
}
}
int main(){
int tab[10];
for (size_t i = 0; i < 10; i++) {
tab[i] = i;
}
print_tab(tab, sizeof(tab) / sizeof(tab[0])); // ou sizeof(tab) / sizeof(int)
return 0;
}
Tu écris vouloir obtenir la taille d'un tableau de caractères. en quelle unité veux-tu l'obtenir ? Que vas-tu faire avec cette taille ?
Je pense qu'hadrien c'est un peu mélangé les pinceaux au moment d'écrire son message. Dans le code qu'il partage l23 dans le message #1, on voit que l'objectif semblait être de calculer le nombre de
struct profilestockés dans
myRep, sans doute en vue d'itérer sur chacun d'entre eux.