talking about fgets
This commit is contained in:
parent
8ba88d2b8d
commit
a1f8b096e3
48
chap/C.tex
48
chap/C.tex
@ -163,7 +163,8 @@ un peu plus loin.
|
||||
La fonction \texttt{printf} permet d'afficher sur la sortie
|
||||
standard le contenu d'une (ou plusieurs)
|
||||
variable sous diverses présentations,
|
||||
qui sont contrôlables par un tout petit DSL\index{DSL}~:
|
||||
qui sont contrôlables par un tout petit
|
||||
DSL\footnote{\textsl{domain specific language}}\index{DSL}~:
|
||||
la chaine de format.
|
||||
|
||||
\begin{verbatim}
|
||||
@ -217,18 +218,61 @@ for (foo=0; foo<1000; foo++) {
|
||||
}
|
||||
\end{verbatim}
|
||||
|
||||
% ---------------------------------------------------------
|
||||
%
|
||||
% voir aussi ~/code/network/README.md
|
||||
%
|
||||
\subsection{Lire : \texttt{fgets}}
|
||||
\index{fgets}
|
||||
|
||||
Cette fonction a pour but de lire une ligne de texte depuis
|
||||
une entrée (stdin, fichier, socket\index{socket}...)
|
||||
et de la ranger en mémoire.
|
||||
Mais commençons par lire la documentation\index{RTFM} de cette fonction,
|
||||
en nous concentrant sur ces deux passages, avant de passer à
|
||||
un exemple\footnote{encore en phase de méditation}.
|
||||
|
||||
Voici deux extraits de ce que nous affirme la page du manuel~:
|
||||
|
||||
\begin{verbatim}
|
||||
DESCRIPTION
|
||||
fgets() reads in at most one less than size characters from stream and
|
||||
stores them into the buffer pointed to by s. Reading stops after an
|
||||
EOF or a newline. If a newline is read, it is stored into the buffer.
|
||||
A terminating null byte ('\0') is stored after the last character in
|
||||
the buffer.
|
||||
|
||||
RETURN VALUE
|
||||
fgets() returns s on success, and NULL on error or when end of file oc‐
|
||||
curs while no characters have been read.
|
||||
\end{verbatim}
|
||||
|
||||
Prenez le temps d'y réfléchir, et essayons un cas simple d'utilisation
|
||||
pour examiner le comportement de cette fonction. Nous allons
|
||||
boucler sur la lecture d'une ligne depuis l'entrée standard dans
|
||||
un buffer d'une taille fixée, puis afficher le nombre de caractères
|
||||
que nous avons reçus.
|
||||
|
||||
\lstinputlisting[language=c]{code/C/fgets-simple.c}
|
||||
|
||||
|
||||
% ---------------------------------------------------------
|
||||
%
|
||||
%
|
||||
|
||||
\subsection{Lire : \texttt{scanf}}
|
||||
\index{scanf}
|
||||
|
||||
Avez-vous bien révisé la section qui cause des pointeurs ?
|
||||
Êtes-vous prèt à d'étranges comportements ?
|
||||
Alors les subtilités de scanf vont vous plaire.
|
||||
À ne plus savoir où peut être la tête de lecture ?
|
||||
Alors les subtilités de \texttt{scanf} vont vous plaire.
|
||||
|
||||
\textit{To be continued...}
|
||||
|
||||
% ---------------------------------------------------------
|
||||
|
||||
|
||||
\subsection{Les fichiers}\index{fopen}\index{fclose}
|
||||
|
||||
Lire et écrire depuis les flux gérés par le système, c'est bien, mais
|
||||
|
1
code/C/.gitignore
vendored
Normal file
1
code/C/.gitignore
vendored
Normal file
@ -0,0 +1 @@
|
||||
fgets-simple
|
@ -8,3 +8,6 @@ no-op: no-op.c Makefile
|
||||
slowprint: slowprint.c Makefile
|
||||
gcc -Wall $< -o $@
|
||||
|
||||
fgets-simple: fgets-simple.c Makefile
|
||||
gcc -Wall $< -o $@
|
||||
|
||||
|
14
code/C/fgets-simple.c
Normal file
14
code/C/fgets-simple.c
Normal file
@ -0,0 +1,14 @@
|
||||
/*
|
||||
* exemple utilisation 'fgets'
|
||||
*/
|
||||
#include <stdio.h>
|
||||
#include <string.h>
|
||||
#define TL 8
|
||||
int main(int argc, char *argv[])
|
||||
{
|
||||
char buffer[TL+1];
|
||||
while( fgets(buffer, TL, stdin) ) {
|
||||
printf(" %4ld\n", strlen(buffer));
|
||||
}
|
||||
return 0;
|
||||
}
|
Loading…
Reference in New Issue
Block a user