Error get array size
Fermé
hadrienlearn
-
Modifié le 4 févr. 2022 à 15:36
mamiemando Messages postés 33446 Date d'inscription jeudi 12 mai 2005 Statut Modérateur Dernière intervention 20 décembre 2024 - 4 févr. 2022 à 15:59
mamiemando Messages postés 33446 Date d'inscription jeudi 12 mai 2005 Statut Modérateur Dernière intervention 20 décembre 2024 - 4 févr. 2022 à 15:59
A voir également:
- Error get array size
- Tree size free - Télécharger - Gestion de fichiers
- Http error 413 zimbra - Forum autres boîtes mail
- Network error ✓ - Forum Réseaux sociaux
- Get data back - Télécharger - Récupération de données
- Eespt technical error ✓ - Forum TNT / Satellite / Réception
3 réponses
Dalfab
Messages postés
706
Date d'inscription
dimanche 7 février 2016
Statut
Membre
Dernière intervention
2 novembre 2023
101
Modifié le 4 févr. 2022 à 15:35
Modifié le 4 févr. 2022 à 15:35
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
23405
Date d'inscription
lundi 9 juin 2008
Statut
Contributeur
Dernière intervention
20 décembre 2024
Ambassadeur
1 557
3 févr. 2022 à 20:43
3 févr. 2022 à 20:43
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?
mamiemando
Messages postés
33446
Date d'inscription
jeudi 12 mai 2005
Statut
Modérateur
Dernière intervention
20 décembre 2024
7 812
4 févr. 2022 à 15:59
4 févr. 2022 à 15:59
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.