• 06 Juin 2026, 11:30:38


Auteur Sujet: STRMID  (Lu 1594 fois)

0 Membres et 1 Invité sur ce sujet

Hors ligne ApocKalipsS

  • *
  • Gangster
  • **** | Une experience GTA IV hors du commun !
  • Messages: 1141
    • Voir le profil
STRMID
« le: 01 Mai 2009, 11:13:21 »
Bonjour,
J'aimerais avoir quelques informations sur la ligne "strmid" Exemple :
strmid(PlayerInfo[playerid][pNote4], "None", 0, strlen("None"), 255);
A quoi ca sert, comment ca marche ?
Je veux modifier une info du joueur à son fichier via InGame, je dois utiliser le strmid ?

Merci de vos réponses !
« Modifié: 01 Mai 2009, 11:23:47 par lepro49 »

Hors ligne Nikko™

  • *
  • Mafioso
  • Messages: 2393
    • Voir le profil
Re : STRMID
« Réponse #1 le: 01 Mai 2009, 11:55:48 »
Tiens, regarde la: http://wiki.sa-mp.com/wiki/Fwrite#String_functions_.28string.inc.29

C'est en anglais, mais j'ai réussi a comprendre, alors normalement ya pas de soucis.
A parament, cest pour extraire un morceau d'un chaine. Dans leur exemple ils extraient "Hello" (compris entre le 30eme et le 35eme carractère)

Voila

++
nikko

Hors ligne Syg

  • Expert programmeur C/C++/PAWN
  • *
  • The GTAOnline Jesus
  • Messages: 3908
    • Voir le profil
Re : STRMID
« Réponse #2 le: 01 Mai 2009, 23:33:39 »
Je met la description de strmid en français pour que tout le monde comprenne la suite
La description de la commande a déjà été donné par Nikko, cette fonction sert à extraire un morceau de chaîne et à la copier dans une autre.

strmid (Dest, Src, Debut, End, Max);
Dest : La chaîne qui recevra le morceau de chaîne que l'on veut extraire
Src : La chaîne source de laquelle on veut extraire un morceau
Debut : Index du premier caractère du morceau à extraire (Attention, le premier caractère d'une chaîne a l'index 0)
Fin : Index du dernier caractère du morceau à extraire
Max : Taille max de la chaîne destination (si la taille du morceau est plus grande que cette valeur, il ne sera pas copier en entier)

Tout ça pour dire que la ligne suivante prête à confusion
strmid(PlayerInfo[playerid][pNote4], "None", 0, strlen("None"), 255);Ici, on copie la totalité de la chaîne "None" dans PlayerInfo[playerid][pNote4].
L'usage de la fonction strmid est inutile dans ce cas, il est plus judicieux d'utiliser la fonction format :
format (PlayerInfo[playerid][pNote4], sizeof (PlayerInfo[playerid][pNote4]), "None");On peut aussi faire usage de la fonction memcpy :
memcpy (PlayerInfo[playerid][pNote4], "None", 0, strlen ("None")+1);
Le mieux aurait été d'utiliser strcpy (fonction archi connue en C/C++) mais cette fonction n'existe pas en standard dans SAMP.

++
Syg
Courtesy of GtaManiac

Hors ligne S!m

  • *
  • Messages: 2341
    • Voir le profil
Re : STRMID
« Réponse #3 le: 02 Mai 2009, 07:01:08 »
Salut,

juste comme ça, une implantation de strcpy ressemblerait-elle à ceci:

stock strcpy(const source[], dest[])
{
    new i = 0;
    while(source[i])
    {
        dest[i] = source[i];
        i++;
    }
}

en éliminant tout test de longueur de chaine bien sûr, il serait même possible de retourner la longueur de la chaîne...

++Sim++





Hors ligne Syg

  • Expert programmeur C/C++/PAWN
  • *
  • The GTAOnline Jesus
  • Messages: 3908
    • Voir le profil
Re : STRMID
« Réponse #4 le: 03 Mai 2009, 01:40:31 »
En fait, la fonction strcpy est absente de SAMP car la fonction memcpy peut tout à fait faire l'affaire :
stock strcpy (dest[], const Source[])
{
   memcpy (Dest, Source, 0, strlen (Source)+1);
}

++
Syg
Courtesy of GtaManiac