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

Langage Delphi Discussion :

pointer sur string


Sujet :

Langage Delphi

  1. #1
    Membre expert

    Homme Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2007
    Messages
    3 473
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Novembre 2007
    Messages : 3 473
    Points : 3 097
    Points
    3 097
    Par défaut pointer sur string
    Bonjour

    Je rédige un petit mémo sur les différents types de données pour un développeur en herbe.
    En voulant décrire le type string, je trouve sur le wiki embarcadero le texte suivant:

    Une variable chaîne de type UnicodeString ou AnsiString occupe 4 octets de mémoire sur les plates-formes 32 bits (et 8 octets sur 64 bits) qui contiennent un pointeur sur une chaîne allouée dynamiquement. Quand une variable chaîne est vide (contient une chaîne d'une longueur de zéro), le pointeur chaîne est nil et aucune mémoire dynamique n'est associée à la variable chaîne.
    J'ai toujours fait les choses en fonction de ça mais pourtant le code suivant semble prouver le contraire.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    procedure TForm9.Button1Click(Sender: TObject);
    var
      S: String;
    begin
      ShowMessageFmt('%p -> %s', [@S, S]);
    end;
    [Window Title]
    Project4

    [Content]
    0019F29C ->

    [OK]

    Donc, le pointer n'est pas nil

    Qu'est-ce que je n'ai pas vu exactement ? Une option de projet spécifique ?
    J-L aka Papy pour les amis

  2. #2
    Rédacteur/Modérateur

    Avatar de SergioMaster
    Homme Profil pro
    Développeur informatique retraité
    Inscrit en
    Janvier 2007
    Messages
    15 105
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 68
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2007
    Messages : 15 105
    Points : 41 189
    Points
    41 189
    Billets dans le blog
    63
    Par défaut
    Bonjour,

    je pense que la doc est ambigue, même en anglais. Dans la doc le chapitre types pointeur est avant ce qui concerne les strings donc en gros rien à voir avec ta varaible qui est null terminated.
    Mais bon, moi et les pointeurs on est toujours un peu fâché
    MVP Embarcadero
    Delphi installés : D3,D7,D2010,XE4,XE7,D10 (Rio, Sidney), D11 (Alexandria), D12 (Athènes)
    SGBD : Firebird 2.5, 3, SQLite
    générateurs États : FastReport, Rave, QuickReport
    OS : Window Vista, Windows 10, Windows 11, Ubuntu, Androïd

  3. #3
    Rédacteur/Modérateur
    Avatar de Andnotor
    Inscrit en
    Septembre 2008
    Messages
    5 755
    Détails du profil
    Informations personnelles :
    Localisation : Autre

    Informations forums :
    Inscription : Septembre 2008
    Messages : 5 755
    Points : 13 349
    Points
    13 349
    Par défaut
    @S est un pointeur sur la variable S et non son contenu.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ShowMessageFmt('%p -> %s', [pointer(S), S]);

  4. #4
    Membre expert

    Homme Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2007
    Messages
    3 473
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Novembre 2007
    Messages : 3 473
    Points : 3 097
    Points
    3 097
    Par défaut
    oups ...

    Là ça donne bien

    [Window Title]
    Demobpl

    [Content]
    00000000 ->

    [OK]

    Merci
    J-L aka Papy pour les amis

  5. #5
    Expert éminent sénior
    Avatar de ShaiLeTroll
    Homme Profil pro
    Développeur C++\Delphi
    Inscrit en
    Juillet 2006
    Messages
    13 576
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Développeur C++\Delphi
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2006
    Messages : 13 576
    Points : 25 216
    Points
    25 216
    Par défaut
    Comme pour un array dynamique @A[0] , tu peux aussi tricher même si c'est moche

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ShowMessageFmt('%p -> %s', [@S[1], S]);
    @S = pointeur sur la variable S
    @S[1] = pointeur sur le premier octet de la chaine, donc le contenu cette fois comme Pointer(S), on ne va pas parler du StrRec caché juste avant pour le Code Page (-12), Element Size (-10), Reference Count (-8) et Length (-4)

    Donc une chaine ' ' soit 1 char, c'est en Unicode 2 octets, ta chaine en mémoire occupe 12 + 2 + 2 (StrRec + Char + Zero Terminal)
    Aide via F1 - FAQ - Guide du développeur Delphi devant un problème - Pensez-y !
    Attention Troll Méchant !
    "Quand un homme a faim, mieux vaut lui apprendre à pêcher que de lui donner un poisson" Confucius
    Mieux vaut se taire et paraître idiot, Que l'ouvrir et de le confirmer !
    L'ignorance n'excuse pas la médiocrité !

    L'expérience, c'est le nom que chacun donne à ses erreurs. (Oscar Wilde)
    Il faut avoir le courage de se tromper et d'apprendre de ses erreurs

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [VBA] pointer sur une feuille bien précise via inputbox
    Par beegees dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 02/01/2006, 19h37
  2. Réponses: 7
    Dernier message: 23/12/2005, 15h08
  3. Faire pointer sur un objet formulaire
    Par bigsister dans le forum Général JavaScript
    Réponses: 4
    Dernier message: 26/11/2004, 16h25
  4. pointer sur une ligne d'un TStringGrid
    Par jeannot27 dans le forum C++Builder
    Réponses: 7
    Dernier message: 20/10/2004, 10h56
  5. Pointer sur un fichier FILE *
    Par Biou Pink Powa dans le forum C
    Réponses: 3
    Dernier message: 29/01/2004, 14h45

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