begin process at 2012 05 30 04:54:58
  Trouver un code source :
 
dans
 
Accueil > Forum > 

C++ & C++ .NET

 > 

Divers

 > 

Divers

 > 

Tableau de caractères, problème de récupération de valeurs


Derniers messages déposésPoser une question dans le forum ou lancer une discussion

Tableau de caractères, problème de récupération de valeurs

jeudi 24 juillet 2008 à 11:51:19 | Tableau de caractères, problème de récupération de valeurs

Arkael

Bonjour à tous.

J'ai un souci actuellement sur un de mes programmes professionels. Je vous expose le maximum d'information en esperant qu'un dieu du C/c++ puisse me dépanner.

J'ai une DLL dev sous Visual Studio 6 qui comporte une fonction :

INT CWiFi::ListWlanAdapters()
{
    char *m_cAdapters[MAX_ADAPTERS]; // MAX_ADAPTERS = 4
    memset(m_cAdapters, 0, sizeof(m_cAdapters));

    int nNumberAdaptersFound = m_pfn_ds_get_adapters(m_cAdapters, MAX_ADAPTERS);
    CString test = cAdapters[0];
    ODS("lecture tableau : %s", test); // permet l'affichage dans un ptit logiciel de la valeur du tableau [0]

    for (int cmpt = 0; cmpt < MAX_ADAPTERS; cmpt++)
    free(m_cAdapters[cmpt]);

    return nNumberAdaptersFind;
}

La fonction : m_pfn_ds_get_adapters fait appel a une DLL dvp sur visual studio 2005, qui elle même sert de Wrapper pour intégrer une Lib fournit par une société extérieure.
nNumberAdaptersFounf retourne le nombre de carte Wifi présent sur le poste : cette variable est bien récupéré comme il faut.

Le probleme se situant lorsque je souhaite affiché la première ligne du tableau récupéré qui normalement devrait retourné une chaine de caractère ressemblant à : {4345JGREE-FR5678-FR544554-565666}
Lors de l'affichage moi je récupère qq chose ressemblant à : IP³ (ou P est en fait à l'envers et tout noir)

voici l'entrée dans la Dll :

INT WINAPI ds_get_adaptersExp(char *adapters[], int max_adapter)
{
    AFX_MANAGE_STATE(AfxGetStaticModuleState());
    CChWps CChWps;

    char *m_adapters[MAX_ADAPTERS];
    memset(m_adapters, 0, sizeof(m_adapters));

    int Res =  CChWps.get_adapters(m_adapters, max_adapter);

    for (int i = 0; i < Res; i++){
        adapters[i] = m_adapters[i];
    } // remplissage du tableau passé en paramètre de sortie

    for (int i = 0; i < 4; i++)
        free(m_adapters[i]);
    return Res;
}
La fonction get_adapters est la suivante et ressemble bcp à la précédente :

int CChWps::get_adapters(char *adapters[], int max_adapter)
{
    char *m_adapters[MAX_ADAPTERS];
    memset(m_adapters, 0, sizeof(m_adapters));

    int Res = ds_get_adapters(m_adapters, max_adapter);

    for (int i = 0; i < Res; i++){
        adapters[i] = m_adapters[i];
    }
    for (int i = 0; i < max_adapter; i++)
    free(m_adapters[i]);

    return Res;
}
la fonction ds_get_adapters(char* adapters[], int max_adapter) est celle provenant de la lib compillée dans la DLL. Sachant qu'elle fonctionne correctement et retourne la bonne valeur dans le tableau.

Je n'arrive pas à comprends la bourde que j'ai pu faire qui doit se situer dans le remplissage de mon second tableau passé en paramètre de sortie de mes fonctions, et qui me permet de transiter le tableau jusqu'à l'endroit voulu.

Est ce que quelqu'un aurait une idée à me formuler pour résoudre ce probleme qui me bloque depuis 4 heures déjà !

Merci d'avance.
jeudi 24 juillet 2008 à 21:21:37 | Re : Tableau de caractères, problème de récupération de valeurs

Lucky92

Réponse acceptée !
Bonsoir,

Il y a un point qui me semble suspect. Lorsque tu fais une opération comme celle-ci :

for (int i = 0; i < Res; i++)
    adapters[i] = m_adapters[i];

tu ne recopies pas des chaînes de caractères, mais juste un tableau de pointeurs ; donc, par la suite, lorsque tu fais :

for (int i = 0; i < max_adapter; i++)
    free(m_adapters[i]);

ton tableau m_adapters[] est nettoyé, mais les chaînes référencées dans adapters[] aussi... ce qui pourrait expliquer ton affichage erroné.





jeudi 24 juillet 2008 à 21:32:22 | Re : Tableau de caractères, problème de récupération de valeurs

yann_lo_san

Salut,

Mélanger du C et de c++ MFC est une erreur.
m_adapter devrait être un CString déclaré en tant que membre de l'objet wrapper.

Ceci devrait marcher si j'ai bien compris ce code bizarre et si les chaines sont allouées avec malloc avant

for (int i = 0; i < Res; i++){
       // adapters[i] = m_adapters[i];
       strcpy(adapters[i], m_adapters[i]);
}


Sinon, affecter un CString avec une chaine C :
CString test((const char*)cAdapters[0]);
vendredi 25 juillet 2008 à 09:37:10 | Re : Tableau de caractères, problème de récupération de valeurs

Arkael

Merci à vous deux pour vos réponses, effectivement j'ai trouvé l'erreur après moult test.

Le souci était bien celui exposé par lucky92 il suffisait simplement de supprimer :

for (int i = 0; i < max_adapter; i++)
    free(m_adapters[i]);

pour regler le souci.

Pour Yann_lo_san le remplissage du tableau en pointeur peut parfaitement se remplir de ma manière comme de la tienne, celà ne pose pas de souci.

Merci encore d'avoir intervenu.


Cette discussion est classée dans : int, tableau, get, max, adapters


Répondre à ce message

Sujets en rapport avec ce message

tri tableau en ligne [ par TWITTI ] bonjour , je suis etudiant en mécanique et la programmtion c est embetant pour moi.J ai un probleme sur mon programme main().Je n arrive pas a faire Pb à l'exécution [ par tomalille ] Bonjour,J'ai un petit pb à l'execution de ce prog. Il compile et les liens sont fait sans erreur ni warning. Par contre lorsque j'appelle le sous-prog Fonction qui retourne un tableau [ par Kurul1 ] Bonjour à tous   J'ai une classe contenant un tableau a deux dimensions comme variable private  Ce que je voudrais c'est une fonction ayant pour param fonction min max [ par devamos ] bonjour,j'aimerais des corrections,si vous pouvez m'aider j'ai ecri ces instructions en devc++,,, c'est une fonction qui cherche le max et le min dans Passer un tableau 2D en paramètre en C [ par poiuytrez3 ] Bonjour, je souhaiterai passer en paramètre un tableau 2D, mais j'ai une erreur de compilation, voici mon code: #include #include void remplissage fonction recv [ par sy3ns ] bonjour, int recv(int s , void * buf , int len , unsigned int flags ); #define MAX  10int ta problème avec l'initialision d'un tableau [ par khen ] Bonjour,voila j'ai un petite problème avec l'initialisation de mon tableau , je vous explique le problèmeon a un tableau de 3 dimension appelé tab et probleme de tableau de pointeurs [ par doditch77 ] Bonjour, Je travaille sur un projet. J'ai crée un classe Oiseeu et une classe voliere. Cette derniere doit etre munie d'un constructeur par défaut qui conflit de type dans un tableau [ par pausecpp ] j'ai eu une réponse inattendue. voici un partie du code (l'essentiel ;) ):...#define N 5....float V[N]={0}; int i;for(i=0; i{printf("\nEntrer la coord Fonction qui utilise un int* externe pour créer un tableau [ par tibob51 ] Bonjour je voudrai savoir si il est possible qu'une fonction recoive un pointeur d'entier,créé un tableau dynamiquement puis l'initialise,afin de le r


Nos sponsors


Sondage...

CalendriCode

Mai 2012
LMMJVSD
 123456
78910111213
14151617181920
21222324252627
28293031   

Consulter la suite du CalendriCode

Photothèque

A découvrir



 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 0,296 sec (4)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales