• # Probleme d'overflow ?

    Posté par . En réponse au message comment récupérer l'adresse mac du pc ou s'execute le programme. Évalué à 1.

    Voilà le code que j'ai trouvé et modifier (il était en main() avant)
    Le problème c'est que le sprintf provoque un buffer overflow, j'ai des problèmes pour comprendre ces erreurs là.
    D'après ce que j'ai compris, il vaut mieux mettre les valeurs dans un buffer :
    char macaddress[128];
    sprinf(macaddress...);
    mais à ce moment là comment faire pour le return, ca n'a pas l'air de marcher ! il faut utiliser une autre commande ?

    Pour que je comprenne un peu mieux, quelle est la taille maximum d'un char * ?

    Désolé d'assommer tout le monde avec mes questions de newbie, mais mon livre ne couvre pas ces questions de base

    #include <string.h>
    #include <stdio.h>
    #include <stdlib.h>
    #include <netinet/in.h>
    #include <net/if.h>
    #include <sys/types.h>
    #include <arpa/inet.h>
    #include <sys/ioctl.h>
    #include <sys/socket.h>
    #include <netdb.h>


    char *getmac(char * interface)
    {
    int r;
    struct protoent *proto;
    int sock;
    struct ifreq ifr;
    char * macaddress;

    proto = getprotobyname("tcp");
    sock = socket(PF_INET,SOCK_STREAM,proto->p_proto);
    memset(&ifr,0,sizeof(struct ifreq));
    strcpy(ifr.ifr_name,interface);
    r = ioctl(sock,SIOCGIFHWADDR,&ifr);
    if(r != 0)
    {
    printf("Couldn't get mac address\n");
    exit(1);
    }
    sprintf(macaddress,"%2.2X:%2.2X:%2.2X:%2.2X:%2.2X:%2.2X",
    (unsigned char)ifr.ifr_hwaddr.sa_data[0],
    (unsigned char)ifr.ifr_hwaddr.sa_data[1],
    (unsigned char)ifr.ifr_hwaddr.sa_data[2],
    (unsigned char)ifr.ifr_hwaddr.sa_data[3],
    (unsigned char)ifr.ifr_hwaddr.sa_data[4],
    (unsigned char)ifr.ifr_hwaddr.sa_data[5]);
    printf("L'adresse mac est : %s",macaddress);
    return(macaddress);
    }