Page 1 sur 1

Pointeur sur une chaine

Publié : mer. 28/mai/2008 16:31
par lepiaf31
Bonjour tout le monde !

J'ai un petit probleme avec les pointeurs sue chaines. Comme je n'arrive pas bien a expliquer mon probleme je vais d'abord faire une exemple :

Code : Tout sélectionner

procedure Turc(*RetourChaine)
...
endprocedure

Chaine = space(100)
Truc(@Chaine)
Comme vous le voyez, je suis obligé de faire un 'space(100)' sur la variable Chaine pour pouvoir reserver de l'espace en memoire. Le probleme c'est que dans la pratique, je ne sais pas quelle taille fera la chaine renvoyée par la fonction Trcu().
Y a t-il donc une autre moyen que faire un space(9999999) pour eviter de ne pas avoir assé de memoire ?

Publié : mer. 28/mai/2008 17:11
par Octavius
Quel est le but de ta manoeuvre ? Je ne comprends pas bien.

Est-ce qu'un code dans ce genre te conviendrait ?

Code : Tout sélectionner

Procedure Truc()
  ...
  ProcedureReturn *Resultat
EndProcedure

*AdresseDeLaChaine=Truc()
Sinon tu as aussi la fonction ReAllocateMemory() pour changer la taille allouée pour une mémoire.

Publié : mer. 28/mai/2008 18:03
par nico
T u peux faire ça:

Code : Tout sélectionner

Procedure Truc()
	Static chaine.s
	chaine="Ce que tu veux"
	ProcedureReturn @chaine
EndProcedure

*Adresse=Truc()
chaine.s=PeekS(*Adresse)
Debug chaine

;-----------------ou----------------

Procedure.s Truc()
	Static chaine.s
	chaine="Ce que tu veux"
	ProcedureReturn chaine
EndProcedure

chaine.s=Truc()
Debug chaine

Publié : mer. 28/mai/2008 19:30
par lepiaf31
Non en fait ma fonction fait une recherche dans un fichier et retourne 1 c'est tout c'est bien passé. Mais je voudrais aussie que la fonctions retoure d'autres informations (type chaine):

Code : Tout sélectionner

procedure Truc(*Nom, *Description, *Texte)

... ;on fait des manip

;on renvoi plusieurs infos
peeks(*Nom, Nom$)
peeks(*Description, Description$)
peeks(*Texte, Texte$)

procedurereturn 1 ;on retourne 1 quand tout c'est bien passé
endprocedure

Publié : mer. 28/mai/2008 19:42
par Oliv
Passe par une structure :wink:

Code : Tout sélectionner

Structure retour
  Nom.s
  Description.s
  Texte.s
EndStructure


Procedure Truc(*arg.retour)
  *arg\Nom = "Babar"
  *arg\Description = "Elephant"
  *arg\Texte = "Habite dans la savane"

  ProcedureReturn 1
EndProcedure


Variable.retour

Truc(Variable)

Debug Variable\Nom
Debug Variable\Description
Debug Variable\Texte

Publié : mer. 28/mai/2008 19:42
par Backup
tu peux mettre des ProcedureReturn dans des conditions aussi

par exemple:

Code : Tout sélectionner

Procedure.s Truc()
  Static chaine.s
  chaine="Ce que tu veux"
  If chaine<>""
    ProcedureReturn chaine
   ;( ProcedureReturn 1)
  Else
    ProcedureReturn  "la chaine est vide"
  EndIf   
EndProcedure 


:)