greeeg a écrit :
Code :
- int longueur_tableau (char nombre[])
- {
- int taille;
- taille=sizeof(nombre);
- return taille;
- }
|
Voila alors 2 questions :
1. c'est bien juste mon passage en paramètre ?
2. la fonction ne me retourne pas la bonne valeur (longueur du tableau de argv[1]), pourquoi ?
(elle retourne 4 quelque soit le contenu de argc[1]).
|
1. oui, tu vas bien récupérer la chaine en question dans ta fonction
2. Tu entres dans la partie obscure et buggante du C.
en faisant l'équivalent de sizeof(char []) tu mesures en fait la taille d'un pointeur (la taille du pointeur vers le premier élément du tableau). sizeof mesure en octets la place prise par un élément du type passé en paramètre. Toi tu voulais le nombre de cases du tableau passé en paramètre, chose impossible à mesurer en C. C'est pourquoi on utilise le fait que dans ton cas présent c'est en fait la longueur d'une chaine de caractères que tu veux, et il existe une fonction pour ça, strlen, mais à utiliser avec des précautions, car le système est très fragile :
Code :
- #include <stdio.h>
- #include <stdlib.h>
- #include <string.h>
- int main (int argc, char * argv [])
- {
- int i,longueur_nombre1;
- if (argc > 1) { // on vérifie que l'utilisateur a bien passé un argument
- longueur_nombre1 = longueur_tableau(argv[1]);
- printf("Le nombre de chiffre du nombre 1 est %i\n", longueur_nombre1);
- system("PAUSE" );
- }
- return 0;
- }
- int longueur_tableau (char nombre[])
- {
- int taille;
- taille = strlen(nombre);
- return taille;
- }
|
Je ne rentre pas dans les détails des chaines de caratères, les autres réponses le feront probablement, mais c'est dans un bouquin qu'il faut regarder.
---------------
trainoo.com, c'est fini