IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Delphi Discussion :

CompareMem( record et string


Sujet :

Delphi

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Homme Profil pro
    Inscrit en
    Mars 2012
    Messages
    14
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Mars 2012
    Messages : 14
    Par défaut CompareMem( record et string
    bonjour je cherche a faire une comparaison d'un tableau (array contenant un record string) avec CompareMem(
    voila un bout de mon prog
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
     
    program Project1;
     
    {$APPTYPE CONSOLE}
     
    uses  SysUtils;
     
    type test=record
         sv: String[255];
    //   sv: String;
         iv:integer;
       end;
    var
      s1,s2  : array[0..10] of test;
     
    begin
        fillchar(s1,sizeof(s1),0);
        fillchar(s2,sizeof(s2),0);
        s1[0].sv := 'test'; s1[0].iv := 30;
        s2[0].sv := 'test'; s2[0].iv := 30;
        if CompareMem(@s1[0], @s2[0], sizeof(test)) then writeln('same data');
        s2[0].sv := 'tesx'; s2[0].iv := 30;
        if not CompareMem(@s1[0], @s2[0], sizeof(test)) then writeln('different data');
        writeln(inttostr(sizeof(test)));
      Readln;
    end.
    avec un string[255] cela fonctionne
    mais quand je remplace string (ligne 10) a la place de String[255] cela ne fonctionne plus
    le inttostr(sizeof(test))) dans le 1ere example est à 260 (sv: String[255])
    le inttostr(sizeof(test))) dans le 2eme example est à 8 (sv: String)
    pouvez-vous m'aider Merci.

  2. #2
    Modérateur
    Avatar de tourlourou
    Homme Profil pro
    Biologiste ; Progr(amateur)
    Inscrit en
    Mars 2005
    Messages
    3 934
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Biologiste ; Progr(amateur)

    Informations forums :
    Inscription : Mars 2005
    Messages : 3 934
    Billets dans le blog
    6
    Par défaut
    Bonjour,
    Dans le record n'est enregistré qu'un pointeur (une adresse de 64 bits) vers la chaîne (comme pour toute variable de type string), donc CompareMem ne peut opérer comme sur un tableau.
    Delphi 5 Pro - Delphi 11.3 Alexandria Community Edition - CodeTyphon 6.90 sous Windows 10 ; CT 6.40 sous Ubuntu 18.04 (VM)
    . Ignorer la FAQ Delphi et les Cours et Tutoriels Delphi nuit gravement à notre code !

Discussions similaires

  1. Réponses: 1
    Dernier message: 22/06/2011, 16h50
  2. Trier les records 'strings'
    Par Javix dans le forum Ruby on Rails
    Réponses: 9
    Dernier message: 03/09/2009, 09h40
  3. record from string
    Par dest dans le forum Caml
    Réponses: 11
    Dernier message: 17/07/2009, 10h33
  4. affectation String et Record
    Par jdavid dans le forum Langage
    Réponses: 19
    Dernier message: 10/08/2007, 16h43
  5. Réponses: 2
    Dernier message: 27/01/2006, 16h47

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo