char buf[255] ou char buf[256] ?

char buf[255] ou char buf[256] ? - C++ - Programmation

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
Reply

Marsh Posté le 09-12-2002 à 18:40:15   

Reply

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 !

:heink:


---------------
du bon usage de rand [C] / [C++]
Reply

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...


Message édité par antp le 09-12-2002 à 18:52:29

---------------
mes programmes ·· les voitures dans les films ·· apprenez à écrire
Reply

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 !

[:antptt] c'est quoi ce topicalacon  :heink:


---------------
"I wonder if the internal negative pressure in self pumping toothpaste tubes is adjusted for different market altitudes." John Carmack
Reply

Marsh Posté le 09-12-2002 à 18:52:48    

Bonne question, j'attends la justification de la part de l'auteur...


---------------
mes programmes ·· les voitures dans les films ·· apprenez à écrire
Reply

Marsh Posté le 09-12-2002 à 18:53:05    

i was here [:debeman]

Reply

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  :pfff:


---------------
"I wonder if the internal negative pressure in self pumping toothpaste tubes is adjusted for different market altitudes." John Carmack
Reply

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 ?
de toute façon logiquement ça doit être 256...

sous windows peut etre... :whistle:


---------------
du bon usage de rand [C] / [C++]
Reply

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 :
  1. #include <stdarg.h>
  2. #include <wtypes.h>
  3. void VarArg(LPCSTR formatstring, ...)
  4. {
  5.    int nSize = 0;
  6.    char buff[255];
  7.    va_list args;
  8.    va_start(args, formatstring);
  9.    nSize = _vsnprintf( buff, sizeof(buff), formatstring, args);
  10. }
  11. void main() {
  12.    VarArg("%s World", "Hello" );
  13. }


 
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] ?


---------------
Le site de ma maman
Reply

Marsh Posté le 09-12-2002 à 18:56:09    

mareek a écrit :

c'est surement un boolay de la klika en forsse  :pfff:  

Salope !
 
Mon dictionnaire me signale que ça ne prend qu'un p.


Message édité par Cherrytree le 09-12-2002 à 19:00:47

---------------
Le site de ma maman
Reply

Marsh Posté le 09-12-2002 à 18:56:09   

Reply

Marsh Posté le 09-12-2002 à 18:56:54    

TAZ > oui :D


Message édité par antp le 09-12-2002 à 18:57:07

---------------
mes programmes ·· les voitures dans les films ·· apprenez à écrire
Reply

Marsh Posté le 09-12-2002 à 18:57:36    

Cherrytree a écrit :

(antp ! ça s'écrit comme ça)  


 
:fuck:


---------------
mes programmes ·· les voitures dans les films ·· apprenez à écrire
Reply

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 ?


---------------
Le site de ma maman
Reply

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.

Code :
  1. #include <stdarg.h>
  2. #include <wtypes.h>
  3. void VarArg(LPCSTR formatstring, ...)
  4. {
  5.    int nSize = 0;
  6.    char buff[255];
  7.    va_list args;
  8.    va_start(args, formatstring);
  9.    nSize = _vsnprintf( buff, sizeof(buff), formatstring, args);
  10. }
  11. void main() {
  12.    VarArg("%s World", "Hello" );
  13. }


 
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] ?


 
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...

Reply

Marsh Posté le 09-12-2002 à 19:04:48    

mé bon cha me parait arbitraire comme décision de foutre 255...

Reply

Marsh Posté le 09-12-2002 à 19:05:57    

bjone a écrit :


 
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...

Bin voilà, pareil. Donc le gars de MSDN a pas réfléchi avant d'écrire.


---------------
Le site de ma maman
Reply

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 ?


---------------
Le site de ma maman
Reply

Marsh Posté le 09-12-2002 à 19:13:06    

Il ne voulait peut-être stocker que 254 caractères utiles :D :ange:. 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.

Reply

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à)


---------------
Whichever format the fan may want to listen is fine with us – vinyl, wax cylinders, shellac, 8-track, iPod, cloud storage, cranial implants – just as long as it’s loud and rockin' (Billy Gibbons, ZZ Top)
Reply

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?


:heink:
 
sans être médisant, on voit que tu fais du vb :o

Reply

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].


Message édité par Carbon_14 le 09-12-2002 à 19:44:17
Reply

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  :sarcastic:
 
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 :heink: 'fin y a des trucs bien spaces. Cf http://packetstormsecurity.nl/9902 [...] 98.bof.txt pour ceux qu'ça intéresse  [:spamafote]


Message édité par Taiche le 09-12-2002 à 19:49:37
Reply

Marsh Posté le 09-12-2002 à 19:54:10    

lorill a écrit :


:heink:
 
sans être médisant, on voit que tu fais du vb :o


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é :D


Message édité par drasche le 09-12-2002 à 19:55:37

---------------
Whichever format the fan may want to listen is fine with us – vinyl, wax cylinders, shellac, 8-track, iPod, cloud storage, cranial implants – just as long as it’s loud and rockin' (Billy Gibbons, ZZ Top)
Reply

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
 

Reply

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 !


---------------
Le site de ma maman
Reply

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  :sarcastic:
 


 
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


---------------
mes programmes ·· les voitures dans les films ·· apprenez à écrire
Reply

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  :sarcastic:
 
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 :heink: 'fin y a des trucs bien spaces. Cf http://packetstormsecurity.nl/9902 [...] 98.bof.txt pour ceux qu'ça intéresse  [:spamafote]  

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: ....... :pt1cable:  
 
c'est quoi ce bordel ? :??:


---------------
"I wonder if the internal negative pressure in self pumping toothpaste tubes is adjusted for different market altitudes." John Carmack
Reply

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: ....... :pt1cable:  
 
c'est quoi ce bordel ? :??:  


 
Ca s'appelle Windows  :whistle:

Reply

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...

Reply

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 :heink:


---------------
"I wonder if the internal negative pressure in self pumping toothpaste tubes is adjusted for different market altitudes." John Carmack
Reply

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 C:/plop/pika/plop/toto/tata/titi/tutu/zb/merde/.../plop/toto/prout/coin, le nom doit etre ridiculement petit ?
 
ahem. :heink:

Reply

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: ....... :pt1cable:  
 
c'est quoi ce bordel ? :??:  


 
la limite c'est pas le nom d'un fichier mais le chemin complet.
donc c:\fichier.ext = 14 caractères.


---------------
mes programmes ·· les voitures dans les films ·· apprenez à écrire
Reply

Marsh Posté le 09-12-2002 à 20:59:43    

ptain grilled :/


---------------
mes programmes ·· les voitures dans les films ·· apprenez à écrire
Reply

Marsh Posté le 09-12-2002 à 21:00:05    

lorill a écrit :


 :??:  
alors si j'ai un truc dans C:/plop/pika/plop/toto/tata/titi/tutu/zb/merde/.../plop/toto/prout/coin, le nom doit etre ridiculement petit ?
 
ahem. :heink:


 
oui


---------------
mes programmes ·· les voitures dans les films ·· apprenez à écrire
Reply

Marsh Posté le 09-12-2002 à 21:00:32    

antp a écrit :

ptain grilled :/

même dit précédement, ca reste totalement crétin...

Reply

Marsh Posté le 09-12-2002 à 21:01:02    


j'ose pas le croire :o

Reply

Marsh Posté le 09-12-2002 à 21:02:00    

bhen sinon comment tu veux savoir d'office quelle taille de variable tu dois prévoir :??:


---------------
mes programmes ·· les voitures dans les films ·· apprenez à écrire
Reply

Marsh Posté le 09-12-2002 à 21:04:57    

test dans mes documents: nom du fichier+chemin 255 caractères max.  :heink:  


---------------
"I wonder if the internal negative pressure in self pumping toothpaste tubes is adjusted for different market altitudes." John Carmack
Reply

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.

Reply

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 :D


---------------
mes programmes ·· les voitures dans les films ·· apprenez à écrire
Reply

Marsh Posté le    

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed