begin process at 2012 05 29 05:03:47
  Trouver un code source :
 
dans
 
Accueil > Forum > 

Archive C/C++

 > 

Archives

 > 

Au secours

 > 

fonction qui retourne un char


Derniers messages déposésPoser une question dans le forum ou lancer une discussion

fonction qui retourne un char

jeudi 21 août 2003 à 22:10:12 | fonction qui retourne un char

glipper

Membre Club
Bonjour,
Voila, j'ai un probleme avec une fonction qui doit retourner une chaine de caractere ! J'ai compris qu'elle ne pouvait pas renvoyer la chaine, mais qu'il fallait lui faire renvoyer un pointeur... alors c'est ce que j'ai fait :) mais ca marche pas :(
Il me renvoi n'importe quoi : "ÖÕw"
Quelqu'un saurait ce qui ne va pas ?
Et si je pouvais aussi avoir une explication ce serait bien :)
Merci

[b]
...
char *Date;
Date = Mot(DateHeure, 1);
SetDlgItemTextA (hWnd,IDC_DATE, Date);
...


char *Mot(char chaine[200], int NMot)
{
char MonText[50];
...
return MonText;
}
[\b]

Glipper
jeudi 21 août 2003 à 22:23:40 | Re : fonction qui retourne un char

anthraxx

C simple: quand tu declare un tableau de caracteres dans une fonction, il ne subsite que dans les limites de la fonction.

Explication:

char *Mot(char chaine[200], int NMot)
{
char MonText[50]; // ceci declare 50 octets plus un pointeur vers ces 50 octets
...
return MonText; // tu renvoies le pointeur
} // mais ici, les 50 octets sont effacés! le pointeur ne pointe plus vers kwak ce soit

tu devrais plutot faire une fonction avec la chaine a retourner en argument:
c'est a dire:
void Mot(const char chaine[200],int NMot,char *resultat);

et l'appeler comme suit:
char date[50];
Mot(DateHeure, 1,date);
SetDlgItemTextA (hWnd,IDC_DATE, date);

j'espere m'etre expliq;
--anthraxx
jeudi 21 août 2003 à 22:35:09 | Re : fonction qui retourne un char

glipper

Membre Club
Ok, ca marche ! Merci bcp
Mais je suis quand meme un peu décu qu'il n'y ai pas eu une solution plus simple... Il resterait quelques améliorations a faire au C/C++ loool
GLipper



-------------------------------
Réponse au message :
-------------------------------

> C simple: quand tu declare un tableau de caracteres dans une fonction, il ne subsite que dans les limites de la fonction.
>
> Explication:
>
> char *Mot(char chaine[200], int NMot)
> {
> char MonText[50]; // ceci declare 50 octets plus un pointeur vers ces 50 octets
> ...
> return MonText; // tu renvoies le pointeur
> } // mais ici, les 50 octets sont effacés! le pointeur ne pointe plus vers kwak ce soit
>
> tu devrais plutot faire une fonction avec la chaine a retourner en argument:
> c'est a dire:
> void Mot(const char chaine[200],int NMot,char *resultat);
>
> et l'appeler comme suit:
> char date[50];
> Mot(DateHeure, 1,date);
> SetDlgItemTextA (hWnd,IDC_DATE, date);
>
> j'espere m'etre expliq;
> --anthraxx
jeudi 21 août 2003 à 23:37:10 | Re : fonction qui retourne un char

BruNews

Administrateur CodeS-SourceS
NON l'efficacite et la simplicite vont rarement ensemble, pour cela c'est vb ou java mais les performances ne seront plus au rdv.
BruNews, ciao...


-------------------------------
Réponse au message :
-------------------------------

> Ok, ca marche ! Merci bcp
> Mais je suis quand meme un peu décu qu'il n'y ai pas eu une solution plus simple... Il resterait quelques améliorations a faire au C/C++ loool
> GLipper
>
>
>
> -------------------------------
> Réponse au message :
> -------------------------------
>
> > C simple: quand tu declare un tableau de caracteres dans une fonction, il ne subsite que dans les limites de la fonction.
> >
> > Explication:
> >
> > char *Mot(char chaine[200], int NMot)
> > {
> > char MonText[50]; // ceci declare 50 octets plus un pointeur vers ces 50 octets
> > ...
> > return MonText; // tu renvoies le pointeur
> > } // mais ici, les 50 octets sont effacés! le pointeur ne pointe plus vers kwak ce soit
> >
> > tu devrais plutot faire une fonction avec la chaine a retourner en argument:
> > c'est a dire:
> > void Mot(const char chaine[200],int NMot,char *resultat);
> >
> > et l'appeler comme suit:
> > char date[50];
> > Mot(DateHeure, 1,date);
> > SetDlgItemTextA (hWnd,IDC_DATE, date);
> >
> > j'espere m'etre expliq;
> > --anthraxx
>
vendredi 22 août 2003 à 00:04:35 | Re : fonction qui retourne un char

Kaid

Passer un tableau de caractères en paramètre pour qu'une fonction y stocke un résultat est la meilleure méthode qui soit. Dans les autres cas, la fonction aurait été obligée d'allouer de la mémoire dynamiquement ce qui peut être une source de fuite mémoire.

Par contre si tu travailles en C++ avec des objets, ca aurait été plus simple, le C++ n'est donc pas à amélorier. Ni le c d'ailleurs :).

Kaid - kaid.fr.st

-------------------------------
Réponse au message :
-------------------------------

> Ok, ca marche ! Merci bcp
> Mais je suis quand meme un peu décu qu'il n'y ai pas eu une solution plus simple... Il resterait quelques améliorations a faire au C/C++ loool
> GLipper
>
>
>
> -------------------------------
> Réponse au message :
> -------------------------------
>
> > C simple: quand tu declare un tableau de caracteres dans une fonction, il ne subsite que dans les limites de la fonction.
> >
> > Explication:
> >
> > char *Mot(char chaine[200], int NMot)
> > {
> > char MonText[50]; // ceci declare 50 octets plus un pointeur vers ces 50 octets
> > ...
> > return MonText; // tu renvoies le pointeur
> > } // mais ici, les 50 octets sont effacés! le pointeur ne pointe plus vers kwak ce soit
> >
> > tu devrais plutot faire une fonction avec la chaine a retourner en argument:
> > c'est a dire:
> > void Mot(const char chaine[200],int NMot,char *resultat);
> >
> > et l'appeler comme suit:
> > char date[50];
> > Mot(DateHeure, 1,date);
> > SetDlgItemTextA (hWnd,IDC_DATE, date);
> >
> > j'espere m'etre expliq;
> > --anthraxx
>
vendredi 22 août 2003 à 19:28:15 | Re : fonction qui retourne un char

anthraxx

Oui, mais il existe des solutions plus simples et rapides meme en c++: la classe CString de MFC par exemple (pour ceux qui cont VC++).
Mais pour ceux qui comme moi abhorrent la MFC, et pour ceux qui ont un autre compilateur, il reste plus qu'a coder une telle classe soi-meme (c'est sque j'ai fait: instructif...)

-------------------------------
Réponse au message :
-------------------------------

> NON l'efficacite et la simplicite vont rarement ensemble, pour cela c'est vb ou java mais les performances ne seront plus au rdv.
> BruNews, ciao...
>
>
> -------------------------------
> Réponse au message :
> -------------------------------
>
> > Ok, ca marche ! Merci bcp
> > Mais je suis quand meme un peu décu qu'il n'y ai pas eu une solution plus simple... Il resterait quelques améliorations a faire au C/C++ loool
> > GLipper
vendredi 22 août 2003 à 19:39:48 | Re : fonction qui retourne un char

BruNews

Administrateur CodeS-SourceS
Une classe CString qu'elle soit de MFC ou de nimporte qui, c'est l'utilite que je ne vois pas mais ses nuisances je les vois a coup sur. Allocations et desalloc memoire sans arret tout cela pour pouvoir ecrire str += autreStr, comme si strcpy et strcat n'allaient pas aussi bien.
BruNews, ciao...


-------------------------------
Réponse au message :
-------------------------------

> Oui, mais il existe des solutions plus simples et rapides meme en c++: la classe CString de MFC par exemple (pour ceux qui cont VC++).
> Mais pour ceux qui comme moi abhorrent la MFC, et pour ceux qui ont un autre compilateur, il reste plus qu'a coder une telle classe soi-meme (c'est sque j'ai fait: instructif...)
>
> -------------------------------
> Réponse au message :
> -------------------------------
>
> > NON l'efficacite et la simplicite vont rarement ensemble, pour cela c'est vb ou java mais les performances ne seront plus au rdv.
> > BruNews, ciao...
> >
> >
> > -------------------------------
> > Réponse au message :
> > -------------------------------
> >
> > > Ok, ca marche ! Merci bcp
> > > Mais je suis quand meme un peu décu qu'il n'y ai pas eu une solution plus simple... Il resterait quelques améliorations a faire au C/C++ loool
> > > GLipper
vendredi 22 août 2003 à 22:09:15 | Re : fonction qui retourne un char

anthraxx

Absolument d'accord que strcpy et strcat sa marche ok (et j'utilise QUE ça)
Mais pour un debutant, il y a quand meme moins de risques de se tromper, de laisser des failles a la buffer overflow, et de perdre du temps inutile. Il y a 3 ans, j'etais ravi qu'il existat la classe CString.
Et cela, sutout quand la rapidité n'est pas l'objectif principal du programme, donc les alloc/desalloc, c'est pas grave. C'est pas elles qui vont le ralentir considerablement, mais plutot les gros loops ou access a internet/au disque dur...
et il arrive d'avoir a faire des operations plus complexes que "str += autreStr".

cela dit, je suis d'accord qu'un developper professionel(serieux) devrait s'en tenir aux fonctions les plus efficaces

(d'ailleurs le resultat: des buffer overflow dans presque tous les programmes qui sortent...)

-------------------------------
Réponse au message :
-------------------------------

> Une classe CString qu'elle soit de MFC ou de nimporte qui, c'est l'utilite que je ne vois pas mais ses nuisances je les vois a coup sur. Allocations et desalloc memoire sans arret tout cela pour pouvoir ecrire str += autreStr, comme si strcpy et strcat n'allaient pas aussi bien.
> BruNews, ciao...


Cette discussion est classée dans : fonction, date, chaine, char, retourne


Répondre à ce message

Sujets en rapport avec ce message

pb avec une fonction qui retourne une chaine de caractère [ par othland ] slt tlm: j'ai introduit le code suivant: char * my_func(........) {char ch[30];   mon code..... return(ch); } void main() { char chaine[30];   chaine getftime(),me retourne pas la date que je veux [ par tibob51 ] <TD id=HB_Focus_Element vAlign=top width="100%" background="" height=250 UNSELECTAB fonction qui retourne une chaine==>libération de la mémoire [ par tibob51 ] Bonsoir,J'ai eu besoin d'utiliser une fonction me retournant une chaine,après mes recherches sur cpp france j'ai trouvé la syntaxe suivante:char* Fonc PROBLEME pour retourner un char* a partir d'un fichier [ par kobee12 ] Voici ma fonction. Elle prend en argument un caractere. A partir de ce caractere, elle renvoie la chaine qui lui est associe.Par exemple:"fichier_lang PROBLEME pour retourner un char* apres recuperation d'une chaine(sscanf) d'un fichier [ par kobee12 ] Voici ma fonction. Elle prend en argument un caractere. A partir de ce caractere, elle renvoie la chaine qui lui est associe.Par exemple:"fichier_lang PB de tri [ par dodo1309 ] Bonjour,Voila je suis entrain de faire un programme qui doit permettre à l'utilisateur d'encoder les valeurs de son choix pour ensuite l'ajouter à la Fonction _T(); [ par d4M13N ] Bonjour,Je suis en train de faire un petit programme en C++ Application Windows Form sous Microsoft Visual Studio 2005.Je suis bloqué sur une malheure convertir chaine de carractère en date [ par sofienems ] Salut :je suis sous C++ ,  j'ai une chaine de carractère que je doit convertir en date au format JJ/MM/AAAA . quelqu'un entre vous peut m'aider ? fonction system() accès refusé [ par fratleym ] Bonjour,oui je sais, la fonction system() c'est horrible mais bon là, je l'utilise surtout pour que ceux qui reprendront le code sachent à peu près ce Chaine de caractère en paramètre dans une fonction [ par ph87 ] bonjour à tous,j'ai un petit problème pour faire un programme en C, je suis perdu dans les pointeurs :)voila ce que je veux faire :   je veux qu'une f


Nos sponsors


Sondage...

Comparez les prix

CalendriCode

Mai 2012
LMMJVSD
 123456
78910111213
14151617181920
21222324252627
28293031   

Consulter la suite du CalendriCode

A découvrir



 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 0,952 sec (3)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales