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 :

problème de tableau de chaines de caractères


Sujet :

C

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Décembre 2007
    Messages
    45
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2007
    Messages : 45
    Par défaut problème de tableau de chaines de caractères
    Bonjour,
    J'ai du mal à résoudre le problème suivant, je suppose qu'il faut utiliser malloc mais j'ai encore un peu de mal avec :

    J'ai une chaine de caractères args contenant une suite d'arguments pour un programme (par exemple "arg1 arg2 arg3"), les arguments sont séparés par un espace. J'aimerai construire un tableau char** argv qui soit de la forme
    {"arg1","arg2","arg3",NULL} (de manière à utiliser execvp)
    Si besoin, je connait le nombre d'argument, il est stocké dans une variable argc, et je connait aussi la taille maximum de la chaine args, qui est de 512 caractères.

    Merci de votre aide !

  2. #2
    Expert confirmé
    Avatar de diogene
    Homme Profil pro
    Enseignant Chercheur
    Inscrit en
    Juin 2005
    Messages
    5 761
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Enseignant Chercheur
    Secteur : Enseignement

    Informations forums :
    Inscription : Juin 2005
    Messages : 5 761
    Par défaut
    On peut envisager la démarche suivante :

    1- Allouer le tableau argv de pointeurs de taille argc+1 pointeurs (pour le NULL terminal)
    argv = malloc((argc+1)* sizeof *argv);

    tester si l'allocation a réussi
    if(argv != NULL) ....

    2- Extraire un argument de args dans un tableau arg (sa taille maximum est connue et inférieure à 512) ou par la fonction strtok()

    3- Allouer la taille mémoire nécessaire pour le stocker. Elle est donnée par la longueur de l'argument extrait +1 pour le 0 terminal. Stocker le pointeur obtenu dans argv
    argv[i] = malloc( strlen(arg)+1)

    tester si l'allocation a réussi

    4- Copier l'argument
    strcpy(argv[i], arg)

    5- Recommencer jusqu'à épuisement des arguments

    6- Terminer argv par NULL;

    7- Prévoir la libération par free de toutes ces allocations lorsqu'on a plus besoin du tableau

    Note : A la place de 3 et 4, on peut envisager de stocker directement les pointeurs issu de strtok dans le tableau argv. Mais cette possibilité, plus simple, dépend des détails du problème.

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Décembre 2007
    Messages
    45
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2007
    Messages : 45
    Par défaut
    Merci beaucoup ! ça marche (mis à part quelques détails dûs au programme autour).

Discussions similaires

  1. Réponses: 7
    Dernier message: 09/12/2014, 22h24
  2. problème avec tableau de chaine de caractères
    Par soumti84 dans le forum Collection et Stream
    Réponses: 3
    Dernier message: 24/04/2009, 14h07
  3. Problème avec un tableau de chaines de caractères
    Par greg_h19 dans le forum Débuter
    Réponses: 1
    Dernier message: 22/12/2008, 15h31
  4. Problème avec tableau de chaine de caractères
    Par saubin dans le forum Débuter
    Réponses: 9
    Dernier message: 31/10/2008, 20h11
  5. Réponses: 4
    Dernier message: 20/08/2004, 10h59

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