API C souci de convertion string et char ?
	
	
		Bonjours .
Je reprend l'aPI systeme ecrit en C sous linux. getaddrinfo(), comme je récupère une structure sa deviens un casse tête pour éviter le 
	Citation:
	
		
		
			 warning: deprecated conversion from string constant to ‘char*’
			
		
	
 sans compter l'erreur qui suis.
j'ai bien tenter un cast mai rien a faire sa ne veux rien savoir... comme je peux pas modifier le code de l'API je fait comment ?? :(
	Code:
	
| 12
 3
 4
 5
 6
 7
 8
 9
 10
 11
 12
 13
 14
 15
 16
 17
 18
 19
 20
 21
 22
 23
 24
 25
 26
 27
 28
 29
 30
 31
 32
 33
 34
 35
 36
 
 |  
#ifndef DEF_ME_NET
#define DEF_ME_NET
#include <iostream>
#include <string>
 
 
#include <stdio.h>
#include <string.h>
 
#include <netdb.h>
#include <arpa/inet.h>
 
 
#include <stdlib.h>
//#define _POSIX_C_SOURCE 2 /* Nécessaire sur certains Linux. */
#include <sys/types.h>
#include <sys/socket.h>
#include <netinet/in.h>
typedef const std::string csr;
class cNet  {
 
	public:
	cNet(){};
	csr GetIpFromHostname(csr & Hostname);
	private:
	csr flags(int f);    		// Affichage du champ ai_flags.
	csr family(int af);  		// Affichage du champ ai_family.
	csr socktype(int sock); 	// Affichage du champ ai_socktype.
	csr protocol(int p); 		// Affichage du champ ai_protocol.
	csr GetIp(struct addrinfo * ai);
 
 
};
 
#endif | 
 
	Code:
	
| 12
 3
 4
 5
 6
 7
 8
 9
 10
 11
 12
 13
 14
 15
 16
 17
 18
 19
 20
 21
 22
 23
 24
 25
 26
 27
 28
 29
 30
 31
 32
 33
 34
 35
 36
 37
 38
 39
 40
 41
 42
 43
 44
 45
 46
 47
 48
 49
 50
 51
 52
 53
 54
 55
 56
 57
 58
 59
 60
 61
 62
 63
 64
 65
 66
 67
 68
 69
 70
 71
 72
 73
 74
 75
 76
 77
 78
 79
 80
 81
 82
 83
 84
 85
 86
 87
 88
 89
 90
 91
 92
 93
 94
 95
 
 |  
#include "cGetHostnameIP.hpp"
// csr =  typedef const std::string csr;
csr cNet::GetIpFromHostname(csr & Hostname){
        char *hostname = "www.google.com", *service = NULL;
        struct addrinfo indices, *res;
        int error;
        memset(&indices, 0, sizeof(indices));
        indices.ai_flags = AI_CANONNAME;
        indices.ai_family = AF_UNSPEC;      // Adresse IPv4 ou IPv6.
        indices.ai_socktype = SOCK_STREAM;  // Socket connectee.
        if ((error = getaddrinfo(hostname, service, &indices, &res))) {
                if (error == EAI_SYSTEM) perror("  [getaddrinfo]");
                fprintf(stderr, "  [getaddrinfo] %s : %s\n", hostname,
                        gai_strerror(error));
                return "Erreur";
        }
 
 
        return res;
//        freeaddrinfo(res);
 
 
 
}
csr cNet::GetIp(struct addrinfo * ai){
     //int i = 0;
        char *ptr = NULL;
        int port = 0;                // Numero de port.
        char addr[INET6_ADDRSTRLEN]; // Adresse reseau.
 
        while (ai != NULL) {  // Parcours de la liste chainée.
              //  printf("  [%d] ",i++);
              //  print_family(ai->ai_family);     printf("(%d) ", ai->ai_addrlen);
              //  print_socktype(ai->ai_socktype); printf(" ");
               // print_protocol(ai->ai_protocol); printf("\n");
                // Récupération du numéro de port et de l'adresse IP.
                switch (ai->ai_family) {
                case AF_INET:  {
                        struct sockaddr_in *sin =
                                (struct sockaddr_in *) ai->ai_addr;
                        ptr = (char *) inet_ntop(AF_INET, &sin->sin_addr,
                                                 addr, sizeof(addr));
                        port = sin->sin_port;
                        break;     }
                case AF_INET6: {
                        struct sockaddr_in6 *sin6 =
                                (struct sockaddr_in6 *) ai->ai_addr;
                        ptr = (char *) inet_ntop(AF_INET6, &sin6->sin6_addr,
                                                 addr, sizeof(addr));
                        port = sin6->sin6_port;
                        break;     }
                }
				std::cout << "IP : " << addr << "Port" << port << std::endl;
				return addr;
              //  if (ptr != NULL) printf("\t@IP -> %s\t port : %d\n",addr,port);
               /* if (ai->ai_canonname != NULL)
                        printf("\tNom -> %s\n", ai->ai_canonname);*/
              //  ai = ai->ai_next; // On passe à l'élément suivant.
        }
		return "Erreur inconnue ";
}
csr cNet::flags(int fl){
	switch (fl) {
	case AI_PASSIVE:     	return "Passive"		; break;
	case AI_CANONNAME:   	return "Name"			; break;
	case AI_NUMERICHOST: 	return "Numeric host"	; break;
	default: return"%d Inconnu " +fl				;
	}
}
csr cNet::family(int fam){
	switch (fam) {
	case AF_INET:  			return "Inet"			; break;
	case AF_INET6: 			return "Inet6"			; break;
	case AF_LOCAL: 			return "Local"			; break;
	default: return "Inconnu : " + fam 				;
	}
}
csr cNet::socktype(int sock){
	switch (sock) {
	case SOCK_STREAM: 		return "Sock stream"	; break;
	case SOCK_DGRAM:  		return "Sock dgram"		; break;
	default: return "Inconnu " + sock				;
	}
}
csr cNet::protocol(int proto){
	switch (proto) {
	case IPPROTO_IP:   		return "Protocole ip"	; break;
	case IPPROTO_TCP:  		return "Protocole tcp"	; break;
	case IPPROTO_UDP:  		return "Protocole udp"	; break;
	case IPPROTO_RAW:  		return "Protocole raw"	; break;
	case IPPROTO_ICMP: 		return "Protocole icmp"	; break;
	default: return "Inconnu " + proto				;
	}
} | 
 
	Code:
	
| 12
 3
 4
 
 |  
cGetHostnameIP.cpp: In member function const csr cNet::GetIpFromHostname(const csr&):
cGetHostnameIP.cpp:4: warning: deprecated conversion from string constant to char*
cGetHostnameIP.cpp:19: error: conversion from addrinfo* to non-scalar type const csr requested | 
 note: j'ai fait un typdef: // csr =  typedef const std::string csr;;)
Merci d'avance