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 :

Caractère espace dans parametres main


Sujet :

C

  1. #1
    Nouveau Candidat au Club
    Femme Profil pro
    Étudiant
    Inscrit en
    Février 2013
    Messages
    2
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Afghanistan

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2013
    Messages : 2
    Points : 1
    Points
    1
    Par défaut Caractère espace dans parametres main
    Bonjour/bonsoir

    Je viens à vous afin de "résoudre" un petit problème.
    Dans un programme j'utilise les paramètres de la fonction main afin de récupérer entre autres une chaîne de caractères qui est susceptible de contenir le caractère espace.

    En résulte un décalage évident des données entre argv[1], argv[2] etc.

    Je réglé le problème en utilisant une condition tel que

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    if(argc-1 == 6){
        /* concaténation de argv[1] avec caractère espace et argv[2]
           argv[2] = argv[3];
          Etc...
        */
    }
    Mon astuce règle très bien le problème seulement je me demandais s'il n'y avait pas une autre méthode peut-etre plus élégante.

    Merci de m'avoir lu.

  2. #2
    Membre expérimenté Avatar de SkyZoThreaD
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Juillet 2013
    Messages
    583
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Autre

    Informations professionnelles :
    Activité : Technicien maintenance
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Juillet 2013
    Messages : 583
    Points : 1 615
    Points
    1 615
    Par défaut
    Bonsoir.
    Sous windows et aussi sous linux je crois... Tu peux donner les paramètres entres guillemets pour indiquer au programme que ce n'est pas une série de paramètres mais bien un seul.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ./monprog.exe "le paramètre 1" "et le deuxième"
    La liberté est à la sociologie ce que l'instant présent est à la physique relativiste.

  3. #3
    Expert éminent sénior

    Femme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juin 2007
    Messages
    5 189
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Juin 2007
    Messages : 5 189
    Points : 17 141
    Points
    17 141
    Par défaut
    En effet, le problème n'est pas lié au programme lui-même, mais à l'interpréteur de commande.
    Mes principes de bases du codeur qui veut pouvoir dormir:
    • Une variable de moins est une source d'erreur en moins.
    • Un pointeur de moins est une montagne d'erreurs en moins.
    • Un copier-coller, ça doit se justifier... Deux, c'est un de trop.
    • jamais signifie "sauf si j'ai passé trois jours à prouver que je peux".
    • La plus sotte des questions est celle qu'on ne pose pas.
    Pour faire des graphes, essayez yEd.
    le ter nel est le titre porté par un de mes personnages de jeu de rôle

  4. #4
    Nouveau Candidat au Club
    Femme Profil pro
    Étudiant
    Inscrit en
    Février 2013
    Messages
    2
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Afghanistan

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2013
    Messages : 2
    Points : 1
    Points
    1
    Par défaut
    Merci, effectivement ça m'était sorti de la tête.
    Se pose donc un autre problème étant donné que le caractère " est également susceptible de faire partie du charset. Alors l'utilisateur peut très bien échapper le caractère, mais ça me plait moyen... En gros et pour faire court, comment puis-je faire en sorte que tous les caractères puissent passer en paramètre sans que l'utilisateur n'est à utiliser une quelconque manip' ?

    Encore merci.

  5. #5
    Modérateur
    Avatar de gangsoleil
    Homme Profil pro
    Manager / Cyber Sécurité
    Inscrit en
    Mai 2004
    Messages
    10 150
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Manager / Cyber Sécurité

    Informations forums :
    Inscription : Mai 2004
    Messages : 10 150
    Points : 28 119
    Points
    28 119
    Par défaut
    Bonjour,

    Citation Envoyé par Lastwissh Voir le message
    Se pose donc un autre problème étant donné que le caractère " est également susceptible de faire partie du charset. Alors l'utilisateur peut très bien échapper le caractère, mais ça me plait moyen... En gros et pour faire court, comment puis-je faire en sorte que tous les caractères puissent passer en paramètre sans que l'utilisateur n'est à utiliser une quelconque manip' ?
    Tu ne peux pas : l'utilisateur doit utiliser correctement l'interface qu'il utilise, il n'est pas possible qu'il saisisse ce qu'il veut comme il le veut et que tu t'en sortes simplement.

    Pour saisir un argument qui contient des espaces et des guillemets, l'utilisateur doit, sur la plupart des systèmes modernes, utiliser les guillemets pour séparer ses arguments et protéger (échapper) les guillemets internes : "ceci \"est\" un argument" "et ceci en \"est\" un autre"Après, tu peux bien sur modifier le séparateur que ton programme va utiliser, mais l'utilisateur devra s'y conformer. Par exemple, tu peux déclarer que le caractère '@' est ton séparateur, mais il faut que tu sois certain que l'utilisateur n'aura pas besoin d'en saisir dans son texte :
    valable : ceci est un premier arg@ceci en "est un" autrenon valable : ceci est mon adresse mail coucou@toto.com@et ceci est un second argument
    "La route est longue, mais le chemin est libre" -- https://framasoft.org/
    Les règles du forum

  6. #6
    Expert éminent Avatar de BufferBob
    Profil pro
    responsable R&D vidage de truites
    Inscrit en
    Novembre 2010
    Messages
    3 035
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : responsable R&D vidage de truites

    Informations forums :
    Inscription : Novembre 2010
    Messages : 3 035
    Points : 8 400
    Points
    8 400
    Par défaut
    note que tu as la possibilité de mixer les quotes pour te simplifier la vie
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    'ceci "est" un argument' 'et ceci en "est" un autre'
    "en revanche mélanger l'apostrophe et les \"doubles quotes\" ne sera pas possible" 'il faudra "échapper" l\'un des deux'
    si on va plus loin, ce que tu décris ressembles plus à une saisie utilisateur en bonne et due forme qu'à un simple passage de paramètres au programme
    à ta place j'aurai tendance à lire non pas les **argv mais plutôt à récupérer la saisie depuis l'entrée standard (fgets, scanf, getchar etc.)

  7. #7
    Expert éminent sénior
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 369
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 369
    Points : 41 519
    Points
    41 519
    Par défaut
    Il me semble que sous *n*x, on peut simplement "échapper" les espaces:
    Code X : Sélectionner tout - Visualiser dans une fenêtre à part
    ./monProgramme Nom\ de\ fichier.txt
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

Discussions similaires

  1. [Batch] Espaces dans parametre de commande call
    Par rakhann974 dans le forum Scripts/Batch
    Réponses: 5
    Dernier message: 17/10/2013, 07h16
  2. [Batch] caractère espace dans les paramètres d'une commande
    Par coleed dans le forum Scripts/Batch
    Réponses: 1
    Dernier message: 02/08/2011, 16h11
  3. Caractère espace dans une chaine de caractère
    Par 8itit dans le forum Servlets/JSP
    Réponses: 11
    Dernier message: 20/04/2010, 14h09
  4. Réponses: 18
    Dernier message: 27/06/2006, 18h37
  5. caractère espace dans un lien ?
    Par kayser dans le forum ASP
    Réponses: 2
    Dernier message: 20/04/2004, 09h52

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