char buf[255] ou char buf[256] ? - C++ - Programmation
Marsh Posté le 09-12-2002 à 18:43:48
Cherrytree a écrit : Qu'est ce que vous en pensez ? Je suis sur que vous vous êtes déjà posé cette question ! |
Marsh Posté le 09-12-2002 à 18:49:59
Si c'est pour un nom de fichier, char buf[MAX_PATH] ou un truc du genre, non ?
de toute façon logiquement ça doit être 256...
Marsh Posté le 09-12-2002 à 18:51:45
Cherrytree a écrit : Qu'est ce que vous en pensez ? Je suis sur que vous vous êtes déjà posé cette question ! |
c'est quoi ce topicalacon
Marsh Posté le 09-12-2002 à 18:52:48
Bonne question, j'attends la justification de la part de l'auteur...
Marsh Posté le 09-12-2002 à 18:53:51
antp a écrit : Bonne question, j'attends la justification de la part de l'auteur... |
c'est surement un boolay de la klika en forsse
Marsh Posté le 09-12-2002 à 18:54:07
antp a écrit : Si c'est pour un nom de fichier, char buf[MAX_PATH] ou un truc du genre, non ? |
sous windows peut etre...
Marsh Posté le 09-12-2002 à 18:55:47
En fait, je suis en train de me frapper MSDN : et voilà le fragment de code sur lequel je tombe.
Code :
|
Vous voyez, il y a le char buff[255] ! C'est censé (antp ! ça s'écrit comme ça) être un buffer qui s'inscrit pile poil dans un nombre de bytes entier.
La question est : le type de MS avait-il raison de penser comme il l'a fait ou aurait-il dû écrire buf[256] ?
Marsh Posté le 09-12-2002 à 18:56:09
mareek a écrit : c'est surement un boolay de la klika en forsse |
Salope !
Mon dictionnaire me signale que ça ne prend qu'un p.
Marsh Posté le 09-12-2002 à 18:56:54
TAZ > oui
Marsh Posté le 09-12-2002 à 18:57:36
Cherrytree a écrit : (antp ! ça s'écrit comme ça) |
Marsh Posté le 09-12-2002 à 19:01:53
Moi perso j'aurai mis un char buf[256]. Allô ? Je suis désolé ! Dites-moi qqch ?
Marsh Posté le 09-12-2002 à 19:02:56
Cherrytree a écrit : En fait, je suis en train de me frapper MSDN : et voilà le fragment de code sur lequel je tombe.
|
bin [256] me parait plus logique, au moins la variable déclarée après sur la pile sera plus facilement aligné sur un DWORD...
Marsh Posté le 09-12-2002 à 19:04:48
mé bon cha me parait arbitraire comme décision de foutre 255...
Marsh Posté le 09-12-2002 à 19:05:57
bjone a écrit : |
Bin voilà, pareil. Donc le gars de MSDN a pas réfléchi avant d'écrire.
Marsh Posté le 09-12-2002 à 19:06:26
bjone a écrit : mé bon cha me parait arbitraire comme décision de foutre 255... |
Que veux-tu dire, grand maître ?
Marsh Posté le 09-12-2002 à 19:13:06
Il ne voulait peut-être stocker que 254 caractères utiles . Le 0 terminal, ça doit pas être rentré dans toutes les têtes.
Comme quoi le copier/coller direct sans relecture ou critique peut qq fois générer des problèmes.
Marsh Posté le 09-12-2002 à 19:28:05
mais s'il déclare un buff[255], il peut foutre 256 chars dedans dont le NULL terminal, ce qui fait plutôt 255 chars utiles non?
(me demande où je suis tombé là)
Marsh Posté le 09-12-2002 à 19:41:28
Drasche a écrit : mais s'il déclare un buff[255], il peut foutre 256 chars dedans dont le NULL terminal, ce qui fait plutôt 255 chars utiles non? |
sans être médisant, on voit que tu fais du vb
Marsh Posté le 09-12-2002 à 19:43:47
Quand on fait char toto[0], ça donne une chaîne de 1 caractère ?
Je pensais benoîtement que l'on déclarait le NOMBRE (>= 1) et qu'on adressait l'INDICE à partir de ZERO. Suis pas pro du tout, donc je dois me fourvoyer.
KC&C 2ème ed., Masson, page 22, int nchiffre[10]; déclare nchiffre comme un tableau de 10 entiers. En C, les indices des tableaux commencent toujours à zéro, donc les éléments de nchiffre sont [0], .., [9].
Marsh Posté le 09-12-2002 à 19:45:52
Lors de la déclaration, c'est char[longueur_totale] et le dernier indice sera longueur_totale - 1. Donc ici, la chaîne de caractères fait 255 octets. Effectivement, 256 n'aurait pas blessé grand-monde sauf dans le cas d'un nom de fichier sous Windows. En effet, un nom de fichier (ou un path complet, j'sais pu) est limité à 255 caractères et non 256. Va savoir pourquoi
EDIT : ah ba non, d'après quelques recherches rapides sous Gougueule, il semblerait que la taille max pour un nom de fichier soit 260 caractères 'fin y a des trucs bien spaces. Cf http://packetstormsecurity.nl/9902 [...] 98.bof.txt pour ceux qu'ça intéresse
Marsh Posté le 09-12-2002 à 19:54:10
lorill a écrit : |
avant de faire du VB j'ai fait du C et du Pascal...
pour moi un char buff[255], ça réserve 256 chars indicés de 0 à 255.
edit: merde ok autant pour moi je m'a trompé
Marsh Posté le 09-12-2002 à 20:03:56
de toute facon le compilateur aligne sur DWORD donc autant mettre 256 ...
typedef struct {
char buf[5];
int toto;
}test;
sizeof(test) = ???? bah pas 9 mais 12
Marsh Posté le 09-12-2002 à 20:09:21
Bon, ben je suis bien content : ça répond (allez savoir pourquoi) à une question existencielle pour moi !
Marsh Posté le 09-12-2002 à 20:16:54
Taiche a écrit : Lors de la déclaration, c'est char[longueur_totale] et le dernier indice sera longueur_totale - 1. Donc ici, la chaîne de caractères fait 255 octets. Effectivement, 256 n'aurait pas blessé grand-monde sauf dans le cas d'un nom de fichier sous Windows. En effet, un nom de fichier (ou un path complet, j'sais pu) est limité à 255 caractères et non 256. Va savoir pourquoi |
justement, 256 octets = 255 caractères du nom de fichier + le zéro terminal, c'est pour ca que j'avais dit que j'aurais mis 256
Marsh Posté le 09-12-2002 à 20:20:15
Taiche a écrit : Lors de la déclaration, c'est char[longueur_totale] et le dernier indice sera longueur_totale - 1. Donc ici, la chaîne de caractères fait 255 octets. Effectivement, 256 n'aurait pas blessé grand-monde sauf dans le cas d'un nom de fichier sous Windows. En effet, un nom de fichier (ou un path complet, j'sais pu) est limité à 255 caractères et non 256. Va savoir pourquoi |
après quelques tests très avancé de ma part, je peux vous annoncer fièrement que la taille maxi d'un nom de fichier sous windows XP est de 206 caractères sur le bureau, 251 caractères à la racine de C:, 220 caractères dans un répertoire quelconque sur D: .......
c'est quoi ce bordel ?
Marsh Posté le 09-12-2002 à 20:21:53
mareek a écrit : après quelques tests très avancé de ma part, je peux vous annoncer fièrement que la taille maxi d'un nom de fichier sous windows XP est de 206 caractères sur le bureau, 251 caractères à la racine de C:, 220 caractères dans un répertoire quelconque sur D: ....... |
Ca s'appelle Windows
Marsh Posté le 09-12-2002 à 20:51:11
ben le bureau c'est déjà un répertoire donc tu dois le rajouter à ton nom de fichier...
Marsh Posté le 09-12-2002 à 20:56:22
Taureau a écrit : ben le bureau c'est déjà un répertoire donc tu dois le rajouter à ton nom de fichier... |
avec le chemin complet, ça fait 257 caractères sur le bureau alors que ça fait 254 caractères à la racine de C
Marsh Posté le 09-12-2002 à 20:57:31
Taureau a écrit : ben le bureau c'est déjà un répertoire donc tu dois le rajouter à ton nom de fichier... |
alors si j'ai un truc dans Cplop/pika/plop/toto/tata/titi/tutu/zb/merde/.../plop/toto/prout/coin, le nom doit etre ridiculement petit ?
ahem.
Marsh Posté le 09-12-2002 à 20:59:10
mareek a écrit : après quelques tests très avancé de ma part, je peux vous annoncer fièrement que la taille maxi d'un nom de fichier sous windows XP est de 206 caractères sur le bureau, 251 caractères à la racine de C:, 220 caractères dans un répertoire quelconque sur D: ....... |
la limite c'est pas le nom d'un fichier mais le chemin complet.
donc c:\fichier.ext = 14 caractères.
Marsh Posté le 09-12-2002 à 20:59:43
ReplyMarsh Posté le 09-12-2002 à 21:00:05
lorill a écrit : |
oui
Marsh Posté le 09-12-2002 à 21:00:32
ReplyMarsh Posté le 09-12-2002 à 21:02:00
bhen sinon comment tu veux savoir d'office quelle taille de variable tu dois prévoir
Marsh Posté le 09-12-2002 à 21:04:57
test dans mes documents: nom du fichier+chemin 255 caractères max.
Marsh Posté le 09-12-2002 à 21:09:10
antp a écrit : bhen sinon comment tu veux savoir d'office quelle taille de variable tu dois prévoir |
ben comment on fait sous unix ?
même en debut de deuxieme année d'iut quand on a du coder une version light du SGF de sys V, on n'avait pas cette limitation. Le nom de fichier en lui même était limité a 14 octets, mais les repertoires n'entraient pas en ligne de compte.
Marsh Posté le 09-12-2002 à 22:01:53
je sais pas comment on fait sous Linux, moi je fais mes softs sous Delphi & C++Builder.
J'utilise TFileName qui est juste un typedef d'AnsiString sous Builder et de string sous Delphi, donc je fais pas attention à la longueur
Marsh Posté le 09-12-2002 à 18:40:15
Qu'est ce que vous en pensez ? Je suis sur que vous vous êtes déjà posé cette question !
---------------
Le site de ma maman