IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

 C Discussion :

Transformer un argv en pointer


Sujet :

C

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Inscrit en
    Septembre 2008
    Messages
    384
    Détails du profil
    Informations forums :
    Inscription : Septembre 2008
    Messages : 384
    Par défaut Transformer un argv en pointer
    Bonjour,


    J'ai une question de débutant :

    Je voudrai créer une fonction qui me permettrait de transformer un argv en pointer , j'ai écris cela :

    La fonction semble être acceptée par le compilateur :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    void argv2char(char* *nb, char *argv) 
    {
    	*nb = argv;
    }

    Mais l'utilisation de la fonction dans le programme, pose des pb de compilation, pouvez vous me dire pourquoi ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    char table_num[3];
    char table_A[3];
    char table_B[3];
    char table_C[3];
    char table_D[3];
     
    argv2char(&table_num, argv[2]);
    argv2char(&table_A[table_num], argv[4]);
    argv2char(&table_B[table_num], argv[6]);
    argv2char(&table_C[table_num], argv[8]);
    argv2char(&table_D[table_num], argv[10]);
    La ligne argv2char(&table_A[table_num], argv[4]); renvoi ces erreurs :
    Error [1129] [] operator requires a pointer and an integer as operands
    Error [1101] lvalue required
    Warning [2054] suspicious pointer conversion


    Je voudrai obtenir cela en résultat final :
    si par exemple on a :

    argv[2] = 1;
    argv[4] = 3;
    argv[6] = 5;
    argv[8] = 7;
    argv[10] = 8;

    à la fin on aura :

    table_num = 1
    table_A[1] = 3
    table_B[1] = 5
    table_C[1] = 7
    table_D[1] = 8

    Pourriez vous m'aider svp ?
    Je vous remercie,

  2. #2
    Rédacteur/Modérateur
    Avatar de Metafire18
    Homme Profil pro
    Ingénieur de recherche Orange Labs
    Inscrit en
    Décembre 2007
    Messages
    777
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Territoire de Belfort (Franche Comté)

    Informations professionnelles :
    Activité : Ingénieur de recherche Orange Labs

    Informations forums :
    Inscription : Décembre 2007
    Messages : 777
    Billets dans le blog
    1
    Par défaut
    Quelle est l'utilité de ton programme? J'ai du mal à comprendre ce que tu as fais

  3. #3
    Rédacteur
    Avatar de Franck.H
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Janvier 2004
    Messages
    6 951
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Haut Rhin (Alsace)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Service public

    Informations forums :
    Inscription : Janvier 2004
    Messages : 6 951
    Par défaut
    Citation Envoyé par Metafire18 Voir le message
    Quelle est l'utilité de ton programme? J'ai du mal à comprendre ce que tu as fais
    +1 ... j'pige rien
    Mon Site
    Ma bibliothèque de gestion des chaînes de caractères en C

    L'imagination est plus importante que le savoir. A. Einstein

    Je ne répond à aucune question technique par MP, merci d'avance !

  4. #4
    Rédacteur
    Avatar de Neitsa
    Homme Profil pro
    Chercheur sécurité informatique
    Inscrit en
    Octobre 2003
    Messages
    1 041
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Chercheur sécurité informatique

    Informations forums :
    Inscription : Octobre 2003
    Messages : 1 041
    Par défaut
    Bonjour,

    Hmmm +1 aussi. J'ai essayé mais n'ai pas compris l'utilité...

    A tout hasard:

    Code C : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    void argv2char(char* *nb, char *argv)

    S'agit-'il du argv de main (ou semblable ?) Dans l'affirmative, c'est:

    char * argv[]

    Dans ce cas précis, Il s'agit d'un pointeur vers un tableau de chaînes de caractères.

    Dans la négative, je n'ai rien dis...

  5. #5
    Membre émérite
    Avatar de Pouet_forever
    Profil pro
    Inscrit en
    Octobre 2009
    Messages
    671
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2009
    Messages : 671
    Par défaut
    En fait table_num n'est pas un nombre donc tu ne peux pas faire :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    argv2char(&table_A[table_num], argv[4]);
    Peut-être que tu voulais mettre &table_A[table_num[0]] ?
    Apparemment d'après ce que tu veux faire tableu_num devrais être de type entier (int?).
    Je pense que tu devrais faire :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    int table_num;
    char table_A[3];
    char table_B[3];
    char table_C[3];
    char table_D[3];
     
    table_num = strtol(argv[2], NULL, 10);
    argv2char(&table_A[1], argv[4]);
    argv2char(&table_B[1], argv[6]);
    argv2char(&table_C[1], argv[8]);
    argv2char(&table_D[1], argv[10]);
    Et il faut modifier ta fonction aussi :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    void argv2char(char *nb, char *argv)
    {
    	*nb = *argv;
    }
    Mais si le but est de récupérer la valeur il faut utiliser strtol comme montré ci-dessus et utiliser des types int (ou autre)

    Si ce n'est pas ça explique mieux ton problème ^^

  6. #6
    Membre éclairé
    Inscrit en
    Septembre 2008
    Messages
    384
    Détails du profil
    Informations forums :
    Inscription : Septembre 2008
    Messages : 384
    Par défaut
    En fait, voici ce que je cherche à faire :

    Je veux récupérer le contenu de plusieurs argv pour les stocker dans des tableaux.

    argv[2]);
    argv[4]);
    argv[6]);
    argv[8]);
    argv[10]);

    Chaque contenu de argv contiendra 2 caractères chiffres : 00, 01, 10 ...

    argv2 representera un n° d'evenement
    argv4 representera un n° de jour
    argv6 representera un n° de mois
    argv8 representera une heure
    argv10 representera des minutes

    Ainsi si argv2 = 1 ; argv4 = 15 ; argv6 = 12 ; argv8 = 08 et argv 10 = 00
    cela signifiera :

    Evenement n°1 le 15/12 à 08:00


    Pouetforever
    m'avait précedemment proposé cette solution, qui stocke les évènements dans des tableaux numériques ( int ).

    En fonction de argv2 ( n° de l'évènement ) les autres tableaux se remplissent en fonction :

    void argv2int(int *nb, char *argv)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    {
    	char tmp[3] = "";
    	strncpy(tmp, argv, 2);
    	*nb = atoi(tmp);
    }
    ...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    int tab_ev;
    int tab_jour[25];
    int tab_mois[25];
    int tab_heure[25];
    int tab_min[25];
    ...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    // Récupération de l'argument correspondant au n°d'évènement :
    argv2int(&tab_ev, argv[2]);
     
    // Rempli ensuite 4 tableaux jour, mois , heure, minute avec la valeur des arguments reçus, et ce, en fonction de l'evenement précédemment capturé :
     
    argv2char(&tab_jour[tab_ev], argv[4]);
    argv2char(&tab_mois[tab_ev], argv[6]);
    argv2char(&tab_heure[tab_ev], argv[8]);
    argv2char(&tab_min[tab_ev], argv[10]);
    Ce principe de fonctionnement me va très bien, seulement les tableaux sont numériques (int) , je voudrai avoir ces mêmes tableaux transformés en tableaux de charactères (char)

    C'est cela que je ne sais pas faire, voila pourquoi je cherchais à transformer un argv en pointeur ....

    Je fais sans doute fausse route, peut être existe il une façon plus simple de générer ces tableaux avec des contenus chiffrés mais de type caractères (char) ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    char tab_ev;
    char tab_jour[25];
    char tab_mois[25];
    char tab_heure[25];
    char tab_min[25];
    Merci de votre aide,

Discussions similaires

  1. transformer une chaîne de char en double (argv[])
    Par peuf23 dans le forum Débuter
    Réponses: 1
    Dernier message: 20/03/2008, 14h28
  2. transformer un jour en JJ/MM/AA
    Par gemini_010 dans le forum Algorithmes et structures de données
    Réponses: 8
    Dernier message: 08/11/2002, 22h55
  3. Transformer un caractère en type énuméré
    Par HT dans le forum Langage
    Réponses: 3
    Dernier message: 22/10/2002, 20h46
  4. [Pointer]Treeview.Data
    Par rbag dans le forum Composants VCL
    Réponses: 7
    Dernier message: 31/08/2002, 01h44
  5. FFT(Fast Fourier Transform)
    Par IngBen dans le forum Traitement du signal
    Réponses: 6
    Dernier message: 23/05/2002, 16h35

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo