Go Down

Topic: Mais que fait exactement la fonction puts() (Read 714 times) previous topic - next topic

pierrot10

Bonjour,

J'ai lu la définition de la fonction puts(), mais j'ai du mal à comprendre exactement ce qu'elle fait
Code: [Select]

// Convert Int to char
        char posiC[2] = {0}; // es-ce que le {0} est indispensable
        sprintf(posiC, "%d", posi);
        puts(posiC);

ou alors mon anglais n'est pas assez bon
Quote

Writes the C string pointed by str to the standard output (stdout) and appends a newline character ('\n').

The function begins copying from the address specified (str) until it reaches the terminating null character ('\0'). This terminating null-character is not copied to the stream.

Notice that puts not only differs from fputs in that it uses stdout as destination, but it also appends a newline character at the end automatically (which fputs does not).

Que va vraiement changer posiC avant et après.
Si je ne me trompe pas,, avant il est bien terminé pas \0 parce que sprintf(), non?
Il ne suffit pas de tout savoir, la persévérance, c'est déjà presque tout!
You can not know everything, perseverance, it is almost everything!

barbudor

Sur Arduino,  cette fonction ne peut rien faire. Je suis même surpris que ca compile.
L'arduino n'implementant le systéme de fichier standard, pas de stdout,  stdin ni puts ni printf.

Sinon en C standard,  puts envoie la chaine de caractères sur stdout suivit d'un retour à la ligne.
Une chaine de caractères étant définie en C comme un tableau de char terminé par le caractère nul.
Relire "le langage C" par Kernigan et Ritchie.

skywodd

Bonjour,

Les fonctions de <stdio.h> ne sont valables que dans deux cas :
- tu as des flux (STREAM / FILE*) disponibles (sur PC par exemple avec la console)
- tu as toi même créer des flux remplaçant ceux de base (stdin, stdout, stderr).

Sur Arduino et plus généralement sur AVR les flux consoles de base ne sont pas du tout implémenté.
Les fonctions compilent car le code est là, mais à l'exécution tu ne fait que sortir du texte sur un flux inexistant.
J'ai jamais testé mais tu doit même avoir un reset de ta carte vu que tu tapes dans un pointeur nulle.

Toujours en AVR un truc classique est de créer des flux remplaçant ceux de bases (stdin, stdout) et sortant sur le port série ou sur un écran, voir même sur un système de fichier.
Sur Arduino ça ne se fait pas comme ça, va savoir pourquoi.
Si ça t'intéresse voila la doc compléte :
http://www.nongnu.org/avr-libc/user-manual/group__avr__stdio.html
Des news, des tutos et plein de bonnes choses sur http://skyduino.wordpress.com !

Go Up