puts(3)

Fonction de la bibliothèque C

Écrit une chaîne sur la sortie standard, puis un retour à la ligne. Aucun format interprété : plus simple que printf pour afficher un texte fixe.

Synopsis
#include <stdio.h>
int puts(const char *s);

Description

puts écrit la chaîne s sur stdout, sans son '\0', puis ajoute un \n. Elle n'interprète rien : un % dans le texte s'affiche tel quel, là où printf(3) y verrait une conversion. Comme printf, elle passe par le tampon de stdout, et le \n qu'elle ajoute suffit à le vider quand la sortie est un terminal.

GCC connaît cette équivalence : même sans optimisation, il compile printf("bonjour\n") en un appel à puts("bonjour"). C'est pour ça qu'un crash dans un printf apparaît parfois sous le nom puts dans gdb.

Valeur de retour

Un nombre positif ou nul en cas de succès, EOF en cas d'erreur. Seul le signe est garanti : ne t'en sers pas comme d'une longueur.

Pièges

  • Le \n est ajouté même si ta chaîne en contient déjà un : puts("ligne 1\n") laisse une ligne vide. Pour écrire une chaîne sans rien ajouter, utilise fputs(s, stdout).

  • puts(NULL) est un comportement indéfini. Avec glibc, le programme plante dans strlen, appelé par puts pour mesurer la chaîne.

  • Mélanger puts et des appels directs à write(2) sur la même sortie est déconseillé par la page de manuel elle-même : les deux ne partagent pas le tampon, et l'ordre d'affichage n'est plus garanti.

Exemple

fputs.c
#include <stdio.h>
int main(void){    puts("ligne 1\n");    fputs("ligne 2\n", stdout);    puts("100 % terminé");    return 0;}
Terminal
$ gcc -Wall -Wextra -g fputs.c -o fputs$ ./fputsligne 1
ligne 2100 % terminé

La ligne vide vient du double \n du premier appel. fputs n'ajoute rien, et le % de la dernière ligne passe sans problème.

C

puts

Écris gm_puts avec write seulement : la chaîne, puis exactement un retour à la ligne, même quand la chaîne est vide.

Ouvrir l'exercice

À toi d'écrire le code.