Code :
- char* lecture(FILE*fp,char caractere)
|
Le type naturel pour les caractères, en C, c'est int :
char * lecture (FILE *fp, int caractere)
(regarde par exemple le type de retour des fonctions fget...() )
Cf. juste au dessus :
int c = 'a';
Code :
- //initialisation du tableau
- for(j=0;j<100;j++) temp[j]='\0';
|
Tu peux écrire, à la place :
memset(temp, '\0', 100);
Code :
- ligne = (char*) malloc (sizeof(char)*(i));
|
Sauf que "i" contient le nombre de caractères saisis : 1 pour 1 caractère, 2 pour 2 caractères, ..., n pour n caractères.
Or, comme le fait remarquer olivthill, il faut toujours qu'une chaîne se termine par '\0'.
Donc, il faut allouer (i+1) caractères pour ligne, et terminer cette variable par '\0'
De plus, il est tout à fait inutile de caster le type de retour de malloc(), et sizeof(char) vaut toujours 1 par définition :
ligne = malloc(i+1);
Ou, si tu veux être absolument propre : ligne = malloc(sizeof(char) * (i+1));
Code :
- strncpy (ligne,temp,i);
|
strncpy() est une fonction dangereuse si tu ne sais pas exactement ce qu'elle fait.
En l'occurence, si la taille de temp est supérieure ou égale à i, ce qui est le cas, alors... aucune '\0' n'est copié dans ligne.
Ton erreur est donc ici.
Comme tu connais exactement la taille de temp et de ligne, utilise tout simplement :
strcpy(ligne, temp);