# C et C++ > C > Contribuez >  Lire un fichier texte ligne par ligne [Sources]

## diogene

Permet de lire un fichier texte ligne par ligne. La longueur d'une ligne est limite par la mmoire disponible.


```

```

----------


## D[r]eadLock

Le seul truc que je vois, c'est que l'on ne peut diffrencier une erreur d'allocation d'une fin de fichier (buff  NULL). Pourquoi ne pas renvoyer 0 et buff  "" (et dire que le retour est le nombre de char, '\0' compris) en cas de fin (normale) de fichier et que -1 est un cas d'erreur ?

----------


## diogene

*D[r]eadLock* : Bonjour et merci de tes remarques




> Le seul truc que je vois, c'est que l'on ne peut diffrencier une erreur d'allocation d'une fin de fichier (buff  NULL). Pourquoi ne pas renvoyer 0 et buff  "" (et dire que le retour est le nombre de char, '\0' compris) en cas de fin (normale) de fichier et que -1 est un cas d'erreur ?


Oui, je sais et je me suis pos la question de diffrentier les deux cas.
A l'origine, ma fonction renvoyait buff et avait un paramtre long * pour renvoyer le nombre d'lments (si l'argument tait diffrent de NULL). Dans ce cas, le retour du nombre d'lments tait optionnel et ne permettait pas de diffrentier  coup sr les deux situations.
J'ai ensuite jug plus commode d'utilisation la fonction telle qu'elle est en omettant  ::oops::   ::oops::  de revenir sur le problme que tu signales 

Je n'ai pas envie de compter le '\0' dans le nombre de caractres car ce n'est pas cohrent avec la dfinition classique de la longueur de la chaine telle que dfinie par le classique strlen

Je vais modifier cela pour 

- laisser Buff  NULL  et nb = 0  pour une fin de fichier
- laisser Buff  NULL  et mettre nb = -1 pour une erreur d'allocation
- laisser Buff != NULL et nb = 0 pour une ligne vide

----------


## diogene

J'ai dit le code du premier message #1 pour tenir compte des observations de *D[r]eadLock*

----------

