char - C - Programmation
Marsh Posté le 03-12-2005 à 23:27:06
Code :
|
int main (void) tu veux dire ?
Marsh Posté le 03-12-2005 à 23:54:32
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() |
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 :
|
Marsh Posté le 04-12-2005 à 00:03:23
Splinter_7 a écrit : Bonjour j'ai un probleme lié à une chaine de caractere :
|
Il faut soit
Marsh Posté le 04-12-2005 à 00:04:00
Tamahome a écrit :
|
Ou plutôt
int main (void) |
Marsh Posté le 04-12-2005 à 00:04:57
olivthill a écrit : La solution est de passer z en paramètre : |
Une solution...
Marsh Posté le 04-12-2005 à 00:22:08
Je vous remercie sa marche jai passé ma variable en paramètre et sa fonctionne. Je pensais que comme il s'agissait d'un tableau de caractere, il se passait automatiquement en parametre.
Marsh Posté le 04-12-2005 à 00:48:12
Splinter_7 a écrit : Je pensais que comme il s'agissait d'un tableau de caractere, il se passait automatiquement en parametre. |
Non. Un tableau seul ne se passe jamais en paramètre. On peut
|
Nota : dans les deux premiers cas, il est recommandé de passer un parametre 'taille', car celle-ci ne peut pas être déduite par la fonction.
Marsh Posté le 04-12-2005 à 00:55:49
merci Emmanuel D elahaye pour l'expllication. J'ai encore du boulot avant de maitriser le C lol
Marsh Posté le 04-12-2005 à 09:38:29
Reply
Marsh Posté le 03-12-2005 à 23:15:56
Bonjour j'ai un probleme lié à une chaine de caractere :
char blabla();
main()
{
char x[8];
x=blabla();
}
char blabla()
{
char z[8];
printf("Saisir z \n" );
scanf("%s",z);
return z;
}
J'ai comme erreur : return makes integer from pointer without a cast
si quelqu'un pouvait m'aider sa serai cool Merci d'avance