J'ai écrit cette fonction, tout est décrit dans le code:

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
 
char* LireLigneFichier(char *lecture, int taille, FILE *pf)  
/* Cette fonction place dans "lecture" une chaîne de "taille" caractères, 
   à partir d'une ligne du fichier "pf".
   Si la longueur de la ligne est supérieure à "taille", seulement les "tailles"
   premiers caractères de la ligne sont placé dans "lecture", et le reste 
   de la ligne est ignoré. 
   En revanche la lecture suivante sera effectuée sur la ligne suivante, 
   on pourra ainsi lire cette nouvelle ligne sans problème due au reste 
   de la ligne précédente.
   Retourne NULL si rien n'a été lu. */
{
    char *temp=NULL;
    char *res;
    char buffer[1024]; /* "buffer" est utilisée pour lire une ligne entière 
                          du fichier.
                          Cette fonction peu lire au maximum des lignes de 
                          "1024-'\n'-1" caractères. */
 
    res=fgets(buffer, sizeof(buffer), pf); /* place la ligne lu dans 
                                              buffer ('\n' inclut), d'une taille
                                              de sizeof(buffer)-1 carac.
                                              retourne NULL si rien n'a été lu */
                                           /* exemple de lecture: "abc\n\0" */
 
    temp=strchr(buffer, '\n'); /* recherche la ou se trouve le '\n' */
 
    if(temp!=NULL)
        *temp='\0'; /* écrasement du '\n'.
       	               exemple: "abc\n\0" devient "abc\0\0" */
                   	 /* note: sous linux(gcc) il faut mettre *(temp-1)='\0'
 	                         sous dev-c++(gcc) *temp='\0' */
 
    strncpy(lecture, buffer, taille);
    lecture[taille-1]='\0'; /* car si la taille de "buffer" est >= à "taille", 
                               alors il n'y aura pas de '\0' terminal dans 
                               "lecture".
                               Donc on écrase le dernier caractére avec '\0' */
 
    return res;
}
Je voudrais déjà avoir votre avis sur cette fonction, et aussi sur le problème de la différence de comportement entre linux et windows (j'y fait référence dans les commentaires), je pense que le problème se situe au niveau du strchr...