[Creatis-hackers] Re: [Dcmlib] c++: string
Mathieu Malaterre
Mathieu.Malaterre at creatis.insa-lyon.fr
Tue Sep 16 17:38:43 CEST 2003
Benoit Regrain wrote:
> Hi,
>
> ----- Original Message -----
> From: "Jean-Pierre Roux" <Jean-Pierre.Roux at creatis.insa-lyon.fr>
> To: "Mathieu Malaterre" <Mathieu.Malaterre at creatis.insa-lyon.fr>
> Cc: <creatis-hackers at creatis.insa-lyon.fr>; <dcmlib at creatis.insa-lyon.fr>
> Sent: Tuesday, September 16, 2003 4:27 PM
> Subject: Re: [Dcmlib] c++: string
>
>
>
>>Quoting Mathieu Malaterre <Mathieu.Malaterre at creatis.insa-lyon.fr>:
>>
>>
>>>Salut les hackers/gdcmeux,
>>>
>>>Je n'arrive pas à faire marcher gdcm sous win32 en mode debug.
>>>
>>>C'est cette instruction coupable:
>>>
>>>const char *res = GdcmHeader.GetPubElValByNumber(0x0008, 0x0016);
>>>
>>>en effet lorsque le champ n'est pas trouvé gdcm renvoi "gdcm::Unfound":
>>
>>
>>
>>Compte tenu du nombre d'occurences de
>>return "gdcm::Unfound";
>>ne pourrait-on pas declarer cette chaine en global (en meme temps que
>
> gdcmDebug,
>
>>etc) et lui affecter sa valeur dans gdcmGlobal::gdcmGlobal ?
>>Ou bien est-ce une mauvaise idée?
>
> Ca marcherait très bien, rien ne l'empeche... et ce serait d'ailleurs pas
> une mauvaise idée...
>
>
>
>>
>>
>>
>>>const char *res = GdcmHeader.GetPubElValByNumber(0x0008, 0x0016);
>>>
>>>string gdcmElValSet::GetElValueByNumber(guint16 group, guint16 element)
>
> {
>
>>> TagKey key = gdcmDictEntry::TranslateToKey(group, element);
>>> if ( ! tagHt.count(key))
>>> return "gdcm::Unfound";
>>> return tagHt.find(key)->second->GetValue();
>>>}
>>>
>>>Est-ce que cette fonction peut etre utilisée sainement, vu que le chaine
>>>"gdcm::Unfound" est locale à la fonction GetElValueByNumber ? Pour moi
>>>la string renvoyée (=objet temporaire) est détruite à la fin de
>>>l'instruction et donc 'res' contient un mauvais pointeur...
>
> Cela doit marcher, car c'est une copie de la chaine de caractere (string)
> qui est retourné.
> Et de plus, avant, je crois que ca marchait.
> Quel genre d'erreur tu as (quel message) ? C'est à la compilation ou à
> l'exécution ?
> Et aussi, pourquoi tu retourne la valeur dans un char* alors que la méthode
> retourne un string
> (surtout qu'il n'y a pas de mémoire allouée pour ton char *... c'est encore
> un pointeur au lieu d'être
> une chaîne de caractères) ?
> Pourquoi ne pas avoir un string pour res ?
>
Je bosse avec wxWindows et il lui faut des wxString. Le seul moyen que
j'ai trouver c'est de passer pas des char*.
Effectivement comme tu le fais remarquer il me manque .c_str() dans mon
instruction (=copié collé raté).
Mon problème reste qu'il faut que je recupère dans une string le
resultat de la fonction. Puis seulement je peux faire un .c_str()
(l'objet est bien en memoire). Et ensuite je transforme en wxString...
pas pratique mais bon 'shit happen'
mathieu
More information about the Dcmlib
mailing list