C++Talk.NET Forum Index C++Talk.NET
C++ language newsgroups
 
Archives   FAQFAQ   SearchSearch   MemberlistMemberlist   UsergroupsUsergroups   RegisterRegister 
 ProfileProfile   Log in to check your private messagesLog in to check your private messages   Log inLog in 

static_cast...

 
Post new topic   Reply to topic    C++Talk.NET Forum Index -> C++ (French)
View previous topic :: View next topic  
Author Message
nico
Guest





PostPosted: Thu Jun 02, 2005 9:23 pm    Post subject: static_cast... Reply with quote



Bonjour,

Voila dans un prog je recupère une structure hostent qui contient donc entre
autre une liste d'adresses ip, pour afficher les adresses je dois récupérer
les différentes parties de l'ip en tant que nombre et non char (pour pas
que ca soit pris en tant que caractère pour pouvoir créer ma QString).

Donc je fais qqch comme ca :

//ds mon header
//...
#define C_ADDR(x) static_cast<int>(static_cast<unsigned char>(x))
//...

//dans mon cpp :
//...

char host[128];
size_t len = 128;

if( gethostname(host, len) == 0)
{
hostent * ret = gethostbyname(host);

if (ret != NULL )
{
_localContact.login = QString(ret->h_name);
_localContact.ip.setAddress( QString("%1.%2.%3.%4")
.arg( C_ADDR(ret->h_addr_list[1][0]) )
.arg( C_ADDR(ret->h_addr_list[1][1]) )
.arg( C_ADDR(ret->h_addr_list[1][2]) )
.arg( C_ADDR(ret->h_addr_list[1][3])) );

qDebug( _localContact.login );
qDebug( _localContact.ip.toString() );
}
}

//...


Ca fonctionne très bien mais j'aimerai savoir s'il y a moyen de simplifier
les static_cast<int>(static_cast<unsigned char>(x))...

Merci.

--
nico
Back to top
nico
Guest





PostPosted: Thu Jun 02, 2005 9:57 pm    Post subject: Re: static_cast... Reply with quote



nico wrote:


Quote:
char host[128];
size_t len = 128;

if( gethostname(host, len) == 0)
{
hostent * ret = gethostbyname(host);


D'ailleurs au passage, faut-il faire un delete sir ret ?

--
nico

Back to top
Fabien LE LEZ
Guest





PostPosted: Thu Jun 02, 2005 11:00 pm    Post subject: Re: static_cast... Reply with quote



On Thu, 02 Jun 2005 23:23:14 +0200, nico <nospam (AT) spam (DOT) fr>:

Quote:
//ds mon header
//...
#define C_ADDR(x) static_cast<int>(static_cast<unsigned char>(x))

C'est très très très dangereux, un tel #define dans un header.
Mieux vaut un

inline int C_ADDR (unsigned char c) { return c; }


Quote:
D'ailleurs au passage, faut-il faire un delete sir ret ?

La réponse est vraisemblablement dans la documentation de ton OS.



Back to top
nico
Guest





PostPosted: Fri Jun 03, 2005 9:14 am    Post subject: Re: static_cast... Reply with quote

Salut,

Quote:
#define C_ADDR(x) static_cast<int>(static_cast<unsigned char>(x))

C'est très très très dangereux, un tel #define dans un header.
Mieux vaut un

inline int C_ADDR (unsigned char c) { return c; }

ok j'ai modifié, ca marche merci.

Quote:
D'ailleurs au passage, faut-il faire un delete sur ret ?

La réponse est vraisemblablement dans la documentation de ton OS.

Faut croire que non alors.

--
nico

Back to top
Fabien LE LEZ
Guest





PostPosted: Fri Jun 03, 2005 5:10 pm    Post subject: Re: static_cast... Reply with quote

On Thu, 02 Jun 2005 23:57:44 +0200, nico <nospam (AT) spam (DOT) fr>:

Quote:
D'ailleurs au passage, faut-il faire un delete sir ret ?

En fait, un delete, certainement pas : il s'agit très
vraisemblablement d'une API faite pour les programmeurs C, qui n'ont
pas accès à delete.

Un free(), c'est possible, mais improbable.

Une possibilité assez courante : la fonction renvoie un pointeur vers
un objet statique. Cf localtime().


Back to top
Horst Kraemer
Guest





PostPosted: Sat Jun 04, 2005 8:01 am    Post subject: Re: static_cast... Reply with quote

nico <nospam (AT) spam (DOT) fr> wrote:

Quote:
nico wrote:


char host[128];
size_t len = 128;

if( gethostname(host, len) == 0)
{
hostent * ret = gethostbyname(host);


D'ailleurs au passage, faut-il faire un delete sir ret ?

Jamais.

D'ailleurs apres

ret1 = gethostbyname();
....
ret2 = gethostbyname():

le contenu de la structure pointée par ret1 peut devenir invalide par
le deuxième appel. Donc il faut copier les valeurs qu`on veut garder
avant le deuxième appel (Il ne suffit pas de copier les pointeurs dans
la structure. Il faut toujours copier les valeurs auquelles les
pointeurs pointent - "deep copy").

--
Horst

--
Lâche pas la patate!

Back to top
Display posts from previous:   
Post new topic   Reply to topic    C++Talk.NET Forum Index -> C++ (French) All times are GMT
Page 1 of 1

 
Jump to:  
You cannot post new topics in this forum
You cannot reply to topics in this forum
You cannot edit your posts in this forum
You cannot delete your posts in this forum
You cannot vote in polls in this forum


Powered by phpBB © 2001, 2006 phpBB Group
SEO toolkit © 2004-2006 webmedic.