Taille d'une chaine de caracteres + malloc [Résolu]

Signaler
Messages postés
19
Date d'inscription
samedi 7 novembre 2009
Statut
Membre
Dernière intervention
16 mai 2010
-
Messages postés
3983
Date d'inscription
jeudi 14 juillet 2005
Statut
Membre
Dernière intervention
30 juin 2013
-
Bonjour (ou plutot bonsoir ^^)

Mon problème est simple : je veux récupérer le contenu d'un fichier (lecture en mode binaire donc aucun caractère n'est ignoré..)

Je voudrais ensuite determiner la taille de ce contenu, mais sans utiliser la variable dans laquelle j'ai stockée la taille du fichier pour effectuer l'allocation de mémoire nécessaire au stockage du contenu, ni strlen() car cette fonction s'arrête lorsqu'elle rencontre un '\0'

En fait de façon plus générale, comment determiner la taille d'une telle chaine dans le code:

"aaaaa\0ccccc\0ddddd"

Merci

7 réponses

Messages postés
21042
Date d'inscription
jeudi 23 janvier 2003
Statut
Modérateur
Dernière intervention
21 août 2019
24
Simple, ton problème est insoluble. C'était d'ailleurs prévisible dans l'énoncé, une "chaine" finit au 1er 0 rencontré.
Ce que tu as est un buffer contenant une suite d'octets, pas une chaine.

Dans pareil cas on peut faire comme dans les BSTR (String de VB et autres interprétés), on stocke la longueur dans les 2 ou 4 1ers octets du buffer.

ciao...
BruNews, MVP VC++
Messages postés
3983
Date d'inscription
jeudi 14 juillet 2005
Statut
Membre
Dernière intervention
30 juin 2013
12
(Sous Windows)
Ouvre le fichier via CreateFile
Récupère la taille du fichier via GetFileSize
Lis le fichier via ReadFile
Ferme le fichier via CloseHandle
---
VB.NET is good ... VB6 is better
Messages postés
19
Date d'inscription
samedi 7 novembre 2009
Statut
Membre
Dernière intervention
16 mai 2010

heu c'est pas vraiment ça ma question... ^^

Le fichier je le lis et je recupère le contenu, ca c'est pas un problème... (d'ailleurs je suis sous windows mais dans le cas present je n'utilise pas les api w32... donc pas de CreateFile, ReadFile, etc.., je passe par fseek/ftell/fread/malloc)
Messages postés
3983
Date d'inscription
jeudi 14 juillet 2005
Statut
Membre
Dernière intervention
30 juin 2013
12
Pourquoi ne veux-tu pas utiliser la fonction te donnant la taille du fichier (en sachant que c'est la seule qui permettrait de résoudre ton problème) ?
---
VB.NET is good ... VB6 is better
Messages postés
19
Date d'inscription
samedi 7 novembre 2009
Statut
Membre
Dernière intervention
16 mai 2010

non ce n'est pas la seule, la preuve celle que j'utilise depuis longtemps (et en deux lignes de codes!):

fseek(pfile, 0 SEEK_END); // Curseur a la fin du fichier
fsize ftell(pfile); // position courante du curseur taille du fichier


Pourquoi ne veux-tu pas utiliser la fonction te donnant la taille du fichier (en sachant que c'est la seule qui permettrait de résoudre ton problème) ?

d'autres part je ne veux contourner, mais résoudre mon problème! ^^

En fait mon problème principal est décrit a la fin du sujet...
Messages postés
19
Date d'inscription
samedi 7 novembre 2009
Statut
Membre
Dernière intervention
16 mai 2010

pas bête... merci ^^
Messages postés
3983
Date d'inscription
jeudi 14 juillet 2005
Statut
Membre
Dernière intervention
30 juin 2013
12
Ton code revient à faire ce que j'ai dit
---
VB.NET is good ... VB6 is better