[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