L'erreur classique du débutant consite à croire que les paramètres entrants (in) doivent être mis en arguments de la fonction, et que les paramètres sortants (out) doivent être retournés par un return. Malheureusement, l'instruction return ne retourne que le contenu du registre EAX, donc juste 4 octets. C'est très pratique pour retourner un code d'erreur, mais pas pour retourner une chaine de caractères. Il faut mettre les paramètres sortants dans la liste des arguments de la fonction, mais bien sûr en les passant par référence et non pas par valeur (autrement dit en passant l'adresse au lieu de la valeur).
Il faut aussi comprendre ce qu'est la pile (stack), et pour cela, il est très utile de faire un petit peu d'assembleur avant d'apprendre le C. Cela éviterait sans doute l'erreur grossière des lignes suivantes :
char blabla() { char z[8]; printf("Saisir z \n" ); scanf("%s",z); return z; } |
z est une zone de 8 octets réservés sur la pile. Mais cet espace n'est garanti qu'à l'intérieur de la fonction. Il sera écrasé quand le programme appellera une autre fonction.
La solution est de passer z en paramètre :
int blabla(char *z) { printf("Saisir z \n" ); scanf("%s",z); return 0; } int main(void)
{
char z[8];
blabla(z);
...
} |