• 29 Mars 2024, 07:56:05


Auteur Sujet: Pourquoi ne pas utiliser 256 dans le tableau de votre chaine  (Lu 9600 fois)

0 Membres et 1 Invité sur ce sujet

Hors ligne R@f

  • *
  • GTAOnline Addict
  • Messages: 4655
    • Voir le profil
Pourquoi ne pas utiliser 256 dans le tableau de votre chaine.

Depuis longtemps, j’ai pu m’apercevoir que certaines personnes avaient la mauvaise habitude d’utiliser un tableau de 256 de long pour leurs chaines, et souvent, c’est totalement inutile. Je vais donc vous expliquer pourquoi il faut éviter de faire ceci.

Il faut savoir que dans une variable qui contient du texte, à la fin de celui-ci se trouve toujours un /0 que vous ne voyez pas. Ce /0 compte pour un caractère et signifie null.
Pour « hi » par exemple, notre tableau aura une longueur de 3 puisqu’on compte le /0 avec.
Exemple :
Code: (pawn) [Sélectionner]
new
String[3] = “hi”;

Ce qui donne :
Code: (pawn) [Sélectionner]
new
String[3] = {“h”, “i”, “/0”};

Ou en ASCII :
Code: (pawn) [Sélectionner]
new
String[3] = {104, 105, 0};

104 est égal à h et 105 à hi. 0 est égal à /0 donc null.
En PAWN, toutes les variables déclarées sont automatiquement à 0. Ce qui veut dire que quand vous faites :
Code: (pawn) [Sélectionner]
new
String[256];

Vous faites enfaite :
Code: (pawn) [Sélectionner]
new
String[256];
for(new i = 0 ; i < 256 ; i++)
String[i] = 0;

Bien sûr, c’est plus optimisé que le code que j’ai montré plus haut, mais ça prend quand même du temps inutile. Et même si ce sont quelques millisecondes, elles s’additionnent à toutes les autres.

De plus, il est totalement inutile d’utiliser autant d’espace car c’est lent. Comme je l’ai dit plus haut, chaque variable est déclaré à 0, plus le tableau est grand, plus ça prend du temps.
Une autre raison, c’est que vous en n’avez pas besoin, petit exemple avec le code qui suit.
Code: (pawn) [Sélectionner]
stock PommeMangees(playerid, nbrDePommes)
{
new
String[256];
format(String,sizeof(String),"Tu as mangé %d pommes”, nbrDePommes);
return SendClientMessage(playerid, COLOR_GREEN, String);
}

En comptant les caractères de la chaine, on arrive à 24 si le personnage a mangé moins de 10 pommes et en prenant compte du /0.
Même en admettant que le personnage a mangé 1'000'000 de pommes, la chaine n’atteindra jamais une longueur de 256.
Si on calcule combien de bytes ont été utilisés pour rien, on arrive à 928bytes, c’est presque un kilobyte de mémoire utilisée pour rien ! (Pour le calcul : (256-24) * 4 = 928)).
Pour cette chaine je pourrais bien utiliser un tableau de 32 si je sais que ma chaine ne dépasse pas les 32 caractères (nombre de pommes et /0 avec).
Je pourrais donc faire :
Code: (pawn) [Sélectionner]
stock PommeMangees(playerid, nbrDePommes)
{
new
String[32];
format(String,sizeof(String),"Tu as mangé %d pommes”, nbrDePommes);
return SendClientMessage(playerid, COLOR_GREEN, String);
}

Pour les autres chaines plus longues, sachez que la chatbox en jeu ne peut pas afficher plus de 128 caractères, donc pourquoi utiliser 256 ?
Pareil pour ce que le joueur envoie. Il ne peut pas écrire plus de 128 caractères dans le chat, donc totalement inutile de mettre 256.
Pour les pseudos des joueurs c’est pareil, ils sont moins long que 24 caractères, donc pour définir une variable qui contient un pseudo utiliser un tableau de 24 (NB : Vous pouvez aussi utiliser MAX_PLAYER_NAME qui est égal à 24, je vous conseille d'utiliser MAX_PLAYER_NAME car un simple changement de la define suffit pour changer la valeur de toutes les variables de pseudos).

Il y a cependant des fois où l’on doit utiliser un tableau de 256. Dans le cas d’une requête SQL, dont le tableau peut aller jusqu’à 1024 (les requêtes sont grandes parfois). Et pour lire ou écrire des informations dans un fichier. Ce sont pour ces deux cas où l’utilisation d’un tableau de 256 (ou plus pour les requêtes SQL) est utile.

J’espère que ce tuto vous a plu et aidé à mieux utiliser les tableaux pour vos variables contenant du texte.

Je vous conseille également de voir deux tutos très intéressants
Quelques règles de base pour mieux scripter par Syg
Les différents opérateurs par Sim


Inspiré du tutoriel en englais de Y_Less.

Téléchargement en format PDF : http://rafweb.ch/download-8.html

Si j'ai fais une erreur sur ce tuto, veuillez me le signaler par message privé ;)


++
R@f
« Modifié: 29 Juin 2009, 18:16:56 par R@f »

Hors ligne spykerc8

  • *
  • 'The GTAOnline.fr GodFather'
  • Messages: 3821
    • Voir le profil
    • http://www.gtaonline.fr
Re : Pourquoi ne pas utiliser 256 dans le tableau de votre variable.
« Réponse #1 le: 24 Juin 2009, 19:59:39 »
Très bon tuto ;)


~ Leader honoraire de la FsK Team ~ -
~ Membre honoraire de la PCP Team ~

Co-fondateur de GTAO - Retraité de la communauté

"Nous ne sommes rien, soyons tout !"


Hors ligne Nikko™

  • *
  • Mafioso
  • Messages: 2393
    • Voir le profil
Re : Pourquoi ne pas utiliser 256 dans le tableau de votre variable
« Réponse #2 le: 24 Juin 2009, 20:04:19 »
Super tuto, on comprend le pourquoi du comment :)

++
nikko

Hors ligne [viruz]rider_77

  • *
  • Mafioso
  • C/C++ programming
  • Messages: 2154
    • Voir le profil
Re : Pourquoi ne pas utiliser 256 dans le tableau de votre variable
« Réponse #3 le: 24 Juin 2009, 20:06:03 »
Bon tuto.
Il est vraie que plusieurs codeurs utilisent inutilement de la mémoire.

Quand tu dis de te signaler les erreurs, tu parles d'orthographe ou de concept?

Hors ligne R@f

  • *
  • GTAOnline Addict
  • Messages: 4655
    • Voir le profil
Re : Pourquoi ne pas utiliser 256 dans le tableau de votre variable
« Réponse #4 le: 24 Juin 2009, 20:06:55 »
Des erreurs de termes utilisés ou d'orthographe ^^

++
R@f

Hors ligne Azz45

  • Good Player
  • *
  • Mafioso
  • RolePlay Player
  • Messages: 2809
    • Voir le profil
Re : Pourquoi ne pas utiliser 256 dans le tableau de votre variable
« Réponse #5 le: 24 Juin 2009, 22:53:22 »
Bon tuto, monsieur R@f.

Azz  8)

~•~  ~•~  ~•~  ~•~  ~•~  ~•~  ~•~  ~•~  ~•~  ~•~  ~•~


~•~  ~•~  ~•~  ~•~  ~•~  ~•~  ~•~  ~•~  ~•~  ~•~  ~•~~•~  ~•~  ~•~  ~•~
Avancement du GM : 3%
~•~  ~•~  ~•~  ~•~  ~•~  ~•~  ~•~  ~•~  ~•~  ~•~  ~•~
~•Merci Kloken, pour la vidéo lors de mon anniversaire•~

Hors ligne LePtitClown

  • [M2R]LePtitClown
  • *
  • Bandit
  • Messages: 342
    • Voir le profil
Re : Pourquoi ne pas utiliser 256 dans le tableau de votre variable
« Réponse #6 le: 25 Juin 2009, 09:35:20 »
Slt

Tres bonne idée si ça peut alléger le serveur
Mais pour un code de type /login, Peut on aussi mettre par ex [50] au lieu de [256] ? D'après ton tuto oui car le nbre de caractère est inférieur mais je ne suis pa sur

A+

Hors ligne S!m

  • *
  • Messages: 2341
    • Voir le profil
Re : Pourquoi ne pas utiliser 256 dans le tableau de votre variable
« Réponse #7 le: 26 Juin 2009, 00:30:32 »
Salut,

dans el cas des commandes, il est toujours préférable de mettre 128 étant donné qu'il s'agit de la longueur maximale possible (il ne faut pas oublier qu'un joueur peut écrire un mot de passe super long si ca le chante...)


++Sim++





Hors ligne LePtitClown

  • [M2R]LePtitClown
  • *
  • Bandit
  • Messages: 342
    • Voir le profil
Re : Pourquoi ne pas utiliser 256 dans le tableau de votre variable
« Réponse #8 le: 27 Juin 2009, 12:03:00 »
Slt

ok merci pour la précision

A+ :D

Hors ligne S!m

  • *
  • Messages: 2341
    • Voir le profil
Re : Pourquoi ne pas utiliser 256 dans le tableau de votre variable
« Réponse #9 le: 27 Juin 2009, 14:21:47 »
Salut,

raf pour les "erreurs" qui pourraient être changés:

tableau => chaine (les problèmes liés aux tableaux sont moins importants, les gens ont tendance à utiliser la bonne taille)

...un tableau de 256 de long pour leurs variables, et souvent... : variables => chaines?

au lieu de simplement mentionner qu'il est possible d'utiliser MAX_PLAYER_NAME au lieu de 24, tu ferais mieux de le conseiller

voilà rien de plus pour le moment

merci r@f pour ce beau tuto et GG

EDIT: peut-être également mentionné que si la chaîne doit se terminer par '\0' (dont la valeur est 0), c'est parce qu'il marque la fin du texte utilisé, donc n'importe quelle fonction qui utilise du texte et qui arrive à un \0 arrêtera à cet endroit (parfois utilie à savoir pour optimiser ces fonctions), aussi dans sa-mp, il existe un define dans un include EOS (End Of String) qui donne également cette valeur

++Sim++
« Modifié: 27 Juin 2009, 14:30:41 par Sim »





Hors ligne R@f

  • *
  • GTAOnline Addict
  • Messages: 4655
    • Voir le profil
Re : Pourquoi ne pas utiliser 256 dans le tableau de votre chaine
« Réponse #10 le: 27 Juin 2009, 16:15:56 »
Hello Sim,

J'ai fais les petits changements que tu as proposé. Merci.
Pour ce qui est du \0 je vais voir ça et faire les changements.
En tout cas, merci pour ton post ;)

++
R@f

Hors ligne Bayshore

  • *
  • Grand Banditisme
  • Messages: 923
    • Voir le profil
Re : Pourquoi ne pas utiliser 256 dans le tableau de votre chaine
« Réponse #11 le: 29 Juin 2009, 18:11:46 »
Wow, ça fait bizarre de le voir en français. ;D

Sinon petite erreur d'orthographe ici : format(String,sizeof(String),"Tu as mangé %d de pommes”, nbrDePommes);

Hors ligne R@f

  • *
  • GTAOnline Addict
  • Messages: 4655
    • Voir le profil
Re : Pourquoi ne pas utiliser 256 dans le tableau de votre chaine
« Réponse #12 le: 29 Juin 2009, 18:16:41 »
Ah oui, j'avais pas fait attention, merci.

++
R@f