Ecrire un fichier dans un char * - C - Programmation
Marsh Posté le 29-04-2005 à 15:59:39
man 3 read, et pas de buffer_size, positionne toi a la fin du fichier pour en connaitre la taille en caractere
Marsh Posté le 29-04-2005 à 16:00:13
Dans un char * on ne peut mettre que 4 octets (8 en 64 bits). Donc, a part si ton fichier est tres petit, ca va etre difficile.
Marsh Posté le 29-04-2005 à 16:10:43
matafan a écrit : Dans un char * on ne peut mettre que 4 octets (8 en 64 bits). Donc, a part si ton fichier est tres petit, ca va etre difficile. |
bah c'est a dire que je n'ai pas fais de malloc vu ke je connais pas la taille du fichier a lire. Le problème ne vient pas de là. Il vient du fait que je n'arrive pas a copier le buffer dans ma chaine de destination
Marsh Posté le 29-04-2005 à 16:12:01
ReplyMarsh Posté le 29-04-2005 à 16:15:42
El touristo a écrit : c'est a dire ?? |
Il veut dire que tu devrais chercher de la documentation sur les pointeurs.
Marsh Posté le 29-04-2005 à 17:58:05
El touristo a écrit : j'aimerais ecrire le contenu d'un fichier dans un char *. |
C'est quoi un 'char *' ?
http://mapage.noos.fr/emdel/notes.htm#char_star
http://mapage.noos.fr/emdel/notes.htm#pointeurs
Citation :
|
str est un pointeur NULL
strcat(str, ...);
invoque donc un comportement indéfini. D'autre part read() n'est pas une fonction standard.
http://mapage.noos.fr/emdel/notes.htm#fichiers
Marsh Posté le 30-04-2005 à 11:53:10
El touristo a écrit : bah c'est a dire que je n'ai pas fais de malloc vu ke je connais pas la taille du fichier a lire. Le problème ne vient pas de là. Il vient du fait que je n'arrive pas a copier le buffer dans ma chaine de destination |
Et tu crois que le C va t'allouer tout seul assez de mémoire pour stocker ton fichier ?
Parfois il y a des gugusses qui ont une approche un peu "magique" de l'informatique. Pour eux, tout se fait tout seul !!!
Marsh Posté le 01-05-2005 à 15:54:01
c'est mon jour de bonté, et c'est sous license BSD (et sa rime ^^)
Code :
|
Marsh Posté le 01-05-2005 à 16:02:43
sigmatador a écrit : c'est mon jour de bonté, et c'est sous license BSD (et sa rime ^^) |
|
|
Marsh Posté le 01-05-2005 à 16:04:08
manque const, cast en trop et ca fuis, tu as fais ca trop rapidement
Marsh Posté le 01-05-2005 à 16:05:57
allez je suis bon prince, je t'autorise à inclure stdlib et stdio ^__^
Marsh Posté le 01-05-2005 à 16:10:28
where ? (j'en vois une pas deux )
Marsh Posté le 01-05-2005 à 16:12:54
sigmatador a écrit : where ? |
Code :
|
le fichier n'est pas fermé
Code :
|
la zone pointée par pData n'est pas libèrée
Marsh Posté le 01-05-2005 à 16:13:09
mais en meme temps j'ai gratter ca vite fait, pour lui donner les grande ligne ^^ (en general je gere mes erreurs un peu plus qu'un simple return NULL ^^)
Marsh Posté le 01-05-2005 à 16:13:40
oops javai pas fait gaffe au fichier ^^
edit; voila c'est corriged ^^
Marsh Posté le 01-05-2005 à 18:54:48
Emmanuel Delahaye a écrit :
|
tu voulais pas plutot faire fclose (fpData); ??
Marsh Posté le 01-05-2005 à 18:58:55
sigmatador a écrit : oops javai pas fait gaffe au fichier ^^ |
voila c'est etanche, pour faire plus claire sizeof(unsigned char) vaut 1 (sizeof retourne une taillle en char) et le cast du malloc est inutile (conversion avec void* implicite)
pData = malloc(ulFileSize);
et personne n'aime rewind ?
Marsh Posté le 01-05-2005 à 20:07:44
ah la par contre un fin mapage en mémoire.........
Marsh Posté le 01-05-2005 à 20:09:41
skelter a écrit : tu voulais pas plutot faire fclose (fpData); ?? |
Non je libère le bloc si la lecture est incorrecte.
Par contre la fermeture du fichier était mal placée. Je l'ai mise au bon endroit.
Marsh Posté le 01-05-2005 à 20:11:00
Citation :
|
vu le peu de complexité de la fonction, avoir un tel niveau d'imbrication me parait quand meme sacrement tirer de l'abus
Marsh Posté le 01-05-2005 à 20:23:54
ok maintenant c'est corrigé
Marsh Posté le 01-05-2005 à 20:47:18
skelter a écrit : pour faire plus claire sizeof(unsigned char) vaut 1 (sizeof retourne une taillle en char) et le cast du malloc est inutile (conversion avec void* implicite) |
ouai je sais mais c'est deux vieilles habitudes ^^
sinon pour le rewind j'ai la flemme de reremodifier ^^
Marsh Posté le 01-05-2005 à 20:48:41
chrisbk a écrit : vu le peu de complexité de la fonction, avoir un tel niveau d'imbrication me parait quand meme sacrement tirer de l'abus |
+1, ca rend le code beaucoup moins lisible, je vois pas l'interet (enfin bon apres chacun son coding style ^^)
Marsh Posté le 29-04-2005 à 15:53:42
Bonjour
j'aimerais ecrire le contenu d'un fichier dans un char *.
Je pensais utiliser le code suivant mais il ne marche pas:
char * str = NULL;
char buffer[BUFFER_SIZE];
while ( (c = read(f_desc_fd,buffer,BUFFER_SIZE)) > 0)
{
strcat(str ,buffer);
}
Qun pourrai m'aider a faire en sorte que mon prog fonctionne ?
Merci.