Bienvenue, Invité. Veuillez vous connecter ou vous inscrire.
Avez-vous perdu votre courriel d'activation?
Connexion avec identifiant, mot de passe et durée de la session

 
avancée

254727 Messages dans 14037 Fils de discussion- par 6623 Membres - Dernier membre: Magicien

24 Mai 2012 à 07:45:03
GTAOnline.frSan Andreas MultiplayerScripting SA-MP [Pawn center]Tutoriels et références SA:MP (Modérateurs: S!m, Xartrick)Pourquoi ne pas utiliser 256 dans le tableau de votre chaine
Pages: [1]   Bas de page
Imprimer
Auteur Fil de discussion: Pourquoi ne pas utiliser 256 dans le tableau de votre chaine  (Lu 1845 fois)
0 Membres et 1 Invité sur ce fil de discussion.
R@f
Administrateur Système de GTAOnline.fr
Hors ligne Hors ligne


Administrateur
GTAOnline Fan Boy
*

Messages: 2924


WWW



« le: 24 Juin 2009 à 19:42:50 »

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)
new
String[3] = “hi”;

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

Ou en ASCII :
Code: (pawn)
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)
new
String[256];

Vous faites enfaite :
Code: (pawn)
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)
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)
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é Clin d'oeil


++
R@f
« Dernière édition: 29 Juin 2009 à 18:16:56 par R@f » Journalisée


Mon FlickrMon Twitter - Saxoboy




Non non non, je ne donne pas d'aide par PM, y a le forum pour ça. Et non, je n'hébergerais pas votre serveur, donc inutile de m'envoyer un PM pour ça aussi.
spykerc8
Hors ligne Hors ligne


Administrateur
GTAOnline Legend
*

'The GTAOnline.fr GodFather'

Messages: 3265


WWW



mrspykerc8

« Répondre #1 le: 24 Juin 2009 à 19:59:39 »

Très bon tuto Clin d'oeil
Journalisée



~ 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 !"




Nikko™
Hors ligne Hors ligne


GTAOnline Fan Boy
*

Messages: 2115


« Répondre #2 le: 24 Juin 2009 à 20:04:19 »

Super tuto, on comprend le pourquoi du comment Sourire

++
nikko
Journalisée
[viruz]rider_77
Hors ligne Hors ligne


GTAOnline Fan Boy
*

C/C++ programming

Messages: 1845


« Répondre #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?
Journalisée
R@f
Administrateur Système de GTAOnline.fr
Hors ligne Hors ligne


Administrateur
GTAOnline Fan Boy
*

Messages: 2924


WWW



« Répondre #4 le: 24 Juin 2009 à 20:06:55 »

Des erreurs de termes utilisés ou d'orthographe ^^

++
R@f
Journalisée


Mon FlickrMon Twitter - Saxoboy




Non non non, je ne donne pas d'aide par PM, y a le forum pour ça. Et non, je n'hébergerais pas votre serveur, donc inutile de m'envoyer un PM pour ça aussi.
Azz45
Good Player
Hors ligne Hors ligne


GTAOnline Fan Boy
*

RolePlay Player

Messages: 1576


« Répondre #5 le: 24 Juin 2009 à 22:53:22 »

Bon tuto, monsieur R@f.

Azz  Cool
Journalisée


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


~•~  ~•~  ~•~  ~•~  ~•~  ~•~  ~•~  ~•~  ~•~  ~•~  ~•~~•~  ~•~  ~•~  ~•~
Avancement du GM : 3%
~•~  ~•~  ~•~  ~•~  ~•~  ~•~  ~•~  ~•~  ~•~  ~•~  ~•~
~•Merci Kloken, pour la vidéo lors de mon anniversaire•~
LePtitClown
[M2R]LePtitClown
Hors ligne Hors ligne


GTAOnline Big Member
*

Messages: 322


« Répondre #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+
Journalisée

S!m
Hors ligne Hors ligne


Moderateur
GTAOnline Fan Boy
*

Messages: 2260


« Répondre #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++
Journalisée





LePtitClown
[M2R]LePtitClown
Hors ligne Hors ligne


GTAOnline Big Member
*

Messages: 322


« Répondre #8 le: 27 Juin 2009 à 12:03:00 »

Slt

ok merci pour la précision

A+ Tr&egrave;s souriant
Journalisée

S!m
Hors ligne Hors ligne


Moderateur
GTAOnline Fan Boy
*

Messages: 2260


« Répondre #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++
« Dernière édition: 27 Juin 2009 à 14:30:41 par Sim » Journalisée





R@f
Administrateur Système de GTAOnline.fr
Hors ligne Hors ligne


Administrateur
GTAOnline Fan Boy
*

Messages: 2924


WWW



« Répondre #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 Clin d'oeil

++
R@f
Journalisée


Mon FlickrMon Twitter - Saxoboy




Non non non, je ne donne pas d'aide par PM, y a le forum pour ça. Et non, je n'hébergerais pas votre serveur, donc inutile de m'envoyer un PM pour ça aussi.
Bayshore
Hors ligne Hors ligne


GTAOnline Addict
*

Messages: 898


« Répondre #11 le: 29 Juin 2009 à 18:11:46 »

Wow, ça fait bizarre de le voir en français. Grima&ccedil;ant

Sinon petite erreur d'orthographe ici : format(String,sizeof(String),"Tu as mangé %d de pommes”, nbrDePommes);
Journalisée
R@f
Administrateur Système de GTAOnline.fr
Hors ligne Hors ligne


Administrateur
GTAOnline Fan Boy
*

Messages: 2924


WWW



« Répondre #12 le: 29 Juin 2009 à 18:16:41 »

Ah oui, j'avais pas fait attention, merci.

++
R@f
Journalisée


Mon FlickrMon Twitter - Saxoboy




Non non non, je ne donne pas d'aide par PM, y a le forum pour ça. Et non, je n'hébergerais pas votre serveur, donc inutile de m'envoyer un PM pour ça aussi.
Pages: [1]   Haut de page
Imprimer
Aller à:  

Theme créé par padexx et modifié par GTAOnline.fr
Page générée en 0.287 secondes avec 26 requêtes.
Forum GTAOnline.fr 2.0 | Design par : Lalu et GtaManiac
Merci a toute la communaute pour son support !
Copyright © 2004-2012 - GTAOnline.fr | GTAPro.com | Contact