Malloc / Lecture fichier - C - Programmation
Marsh Posté le 23-07-2008 à 14:04:13
Il faut toujours mettre un caractère nul en fin d'une chaine en C. Donc, ajouter ligne 19 :
temp[i] = '\0'; |
Marsh Posté le 23-07-2008 à 14:12:05
merci pour ta reponse
ben en fait temp est initialisé à '\0' et le fait que j'increment encore une fois i sous entend que je copie tout les caracteres de temp+un '\0'.
j'ai donc toujours la meme erreur...
Marsh Posté le 23-07-2008 à 14:22:15
Code :
|
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...() )
Code :
|
Cf. juste au dessus :
int c = 'a';
Code :
|
Tu peux écrire, à la place :
memset(temp, '\0', 100);
Code :
|
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() 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);
Marsh Posté le 23-07-2008 à 15:03:55
Elmoricq a écrit :
|
c'est seulement pour les puristes non ?
j'ai quand meme testé changé le type
Elmoricq a écrit :
|
Merci je connaissais pas cette fonction
Elmoricq a écrit :
|
je savais qu'il fallait ajouter un caractere mais vu que la boucle incrementait une fois le i à la fin, je pensais que j'avais deja mon n+1 nombre de caractere. non?
Elmoricq a écrit :
|
effectivement je n'avais pas pensé au '\0' Mon erreur etait bien la Merci ^^
Marsh Posté le 23-07-2008 à 15:05:05
fatloui a écrit : |
Sauf que i vaut 0 au départ.
Marsh Posté le 23-07-2008 à 11:15:53
Bonjour,
j'ai un nouveau probleme de lecture de fichier
J'ai ecrit une fonction qui me permet de lire plusieurs caracteres dans un fichier jusqu'au caractere choisi (si je veux lire une ligne, je met '\n' comme parametre)
Simplement, je dois faire quelquechose de mal etant donné que si je lis "texte.txt", la fonction deconne et renvoi "texte.txtsWindows".
je comprend pas d'ou vient l'erreur. Quand j'affiche la valeur de i est 10, la taille de temp est 10 et la taille de ligne est 17. :s pourtant je fais bien mon malloc (il me semble)
Merci de votre aide
Message édité par fatloui le 23-07-2008 à 13:54:46