std:: fgets
|
Défini dans l'en-tête
<cstdio>
|
||
|
char
*
fgets
(
char
*
str,
int
count,
std::
FILE
*
stream
)
;
|
||
Lit au maximum count - 1 caractères depuis le flux de fichier donné et les stocke dans le tableau de caractères pointé par str . L'analyse s'arrête si un caractère de nouvelle ligne est trouvé, auquel cas str contiendra ce caractère de nouvelle ligne, ou si une fin de fichier se produit. Si des octets sont lus et qu'aucune erreur ne survient, écrit un caractère nul à la position immédiatement après le dernier caractère écrit dans str .
Table des matières |
Paramètres
| str | - | pointeur vers un élément d'un tableau de caractères |
| count | - | nombre maximum de caractères à écrire (généralement la longueur de str ) |
| stream | - | flux de fichier depuis lequel lire les données |
Valeur de retour
str en cas de succès, pointeur nul en cas d'échec.
Si la condition de fin de fichier est rencontrée, positionne l'indicateur eof sur le stream (voir std::feof() ). Ceci ne constitue un échec que si aucun octet n'a été lu, auquel cas un pointeur nul est retourné et le contenu du tableau pointé par str n'est pas modifié (c'est-à-dire que le premier octet n'est pas écrasé par un caractère nul).
Si l'échec a été causé par une autre erreur, définit l'indicateur d'erreur (voir std::ferror() ) sur stream . Le contenu du tableau pointé par str est indéterminé (il pourrait même ne pas être terminé par un caractère nul).
Notes
POSIX exige en outre
que
fgets
définisse
errno
s'il rencontre une défaillance autre que la condition de fin de fichier.
Bien que la spécification standard soit peu claire dans les cas où count <= 1 , les implémentations courantes le font
- si count < 1 , ne rien faire, signaler une erreur,
- si count == 1 ,
-
- certaines implémentations ne font rien, signalent une erreur,
- d'autres ne lisent rien, stockent zéro dans str [ 0 ] , signalent un succès.
Exemple
#include <cstdio> #include <cstdlib> #include <iomanip> #include <iostream> #include <span> void dump(std::span<const char> buf, std::size_t offset) { std::cout << std::dec; for (char ch : buf) std::cout << (ch >= ' ' ? ch : '.'), offset--; std::cout << std::string(offset, ' ') << std::hex << std::setfill('0') << std::uppercase; for (unsigned ch : buf) std::cout << std::setw(2) << ch << ' '; std::cout << std::dec << '\n'; } int main() { std::FILE* tmpf = std::tmpfile(); std::fputs("Alan Turing\n", tmpf); std::fputs("John von Neumann\n", tmpf); std::fputs("Alonzo Church\n", tmpf); std::rewind(tmpf); for (char buf[8]; std::fgets(buf, sizeof buf, tmpf) != nullptr;) dump(buf, 10); }
Sortie :
Alan Tu. 41 6C 61 6E 20 54 75 00 ring..u. 72 69 6E 67 0A 00 75 00 John vo. 4A 6F 68 6E 20 76 6F 00 n Neuma. 6E 20 4E 65 75 6D 61 00 nn..uma. 6E 6E 0A 00 75 6D 61 00 Alonzo . 41 6C 6F 6E 7A 6F 20 00 Church.. 43 68 75 72 63 68 0A 00
Voir aussi
|
lit une entrée formatée depuis
stdin
, un flux de fichier ou un tampon
(fonction) |
|
|
(obsolète en C++11)
(supprimé en C++14)
|
lit une chaîne de caractères depuis
stdin
(fonction) |
|
écrit une chaîne de caractères vers un flux de fichier
(fonction) |
|
|
Documentation C
pour
fgets
|
|