Taille d'une chaine de caracteres + malloc

Résolu
underprog Messages postés 19 Date d'inscription samedi 7 novembre 2009 Statut Membre Dernière intervention 16 mai 2010 - 24 mars 2010 à 19:26
cs_ghuysmans99 Messages postés 3982 Date d'inscription jeudi 14 juillet 2005 Statut Membre Dernière intervention 30 juin 2013 - 25 mars 2010 à 18:50
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

BruNews Messages postés 21040 Date d'inscription jeudi 23 janvier 2003 Statut Modérateur Dernière intervention 21 août 2019
24 mars 2010 à 23:05
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++
3
cs_ghuysmans99 Messages postés 3982 Date d'inscription jeudi 14 juillet 2005 Statut Membre Dernière intervention 30 juin 2013 16
24 mars 2010 à 19:40
(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
0
underprog Messages postés 19 Date d'inscription samedi 7 novembre 2009 Statut Membre Dernière intervention 16 mai 2010
24 mars 2010 à 19:52
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)
0
cs_ghuysmans99 Messages postés 3982 Date d'inscription jeudi 14 juillet 2005 Statut Membre Dernière intervention 30 juin 2013 16
24 mars 2010 à 20:27
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
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
underprog Messages postés 19 Date d'inscription samedi 7 novembre 2009 Statut Membre Dernière intervention 16 mai 2010
24 mars 2010 à 21:31
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...
0
underprog Messages postés 19 Date d'inscription samedi 7 novembre 2009 Statut Membre Dernière intervention 16 mai 2010
25 mars 2010 à 10:54
pas bête... merci ^^
0
cs_ghuysmans99 Messages postés 3982 Date d'inscription jeudi 14 juillet 2005 Statut Membre Dernière intervention 30 juin 2013 16
25 mars 2010 à 18:50
Ton code revient à faire ce que j'ai dit
---
VB.NET is good ... VB6 is better
0
Rejoignez-nous