Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1381 connectés 

  FORUM HardWare.fr
  Programmation
  C

  [résolu] parcours d'un char** sans connaitre le nombre de chaines

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

[résolu] parcours d'un char** sans connaitre le nombre de chaines

n°1894158
swilmet
Posté le 11-06-2009 à 14:30:15  profilanswer
 

Bonjour à tous !
Voilà le prototype de la fonction que j'ai écrite :

Code :
  1. char * extract_options(char **args_list, char *valid_options);


Sans entrer dans les détails (ce n'est pas ça l'important), la fonction parcours args_list et repère les options (qui commencent par '-') valides, et renvoie la chaine contenant toutes les options trouvées, et NULL si une option était invalide.
 
Pour parcourir args_list, j'ai fait comme ceci :

Code :
  1. for (int n = 0 ; *args_list != NULL ; args_list++)


Ça marche très bien, mais je me demande ce qu'il se passerait si il y avait en mémoire quelque chose juste après args_list, c'est à dire, une fois qu'il a incrémenté args_list pour la dernière fois (normalement) si il peut il y avoir autre chose que NULL. En gros est-il possible d'avoir un débordement mémoire ?
 
Pour tester cette fonction, dans main j'envoie argv+2 et argv[1] comme arguments.
 
Si comme premier argument j'envoie quelque chose comme :

Code :
  1. char *args_list[4] = {"-abc", "arg", "-x", NULL};


Alors là je sais qu'il n'y aura pas de problèmes, mais il faut que la fonction puisse fonctionner dans le cas où NULL n'est pas explicitement écrit à la fin.
 
D'avance merci pour vos éclaircissements.


Message édité par swilmet le 11-06-2009 à 16:27:54
mood
Publicité
Posté le 11-06-2009 à 14:30:15  profilanswer
 

n°1894160
masklinn
í dag viðrar vel til loftárása
Posté le 11-06-2009 à 14:32:03  profilanswer
 

Pourquoi ne pas utiliser getopt(3) [:pingouino dei]


---------------
Stick a parrot in a Call of Duty lobby, and you're gonna get a racist parrot. — Cody
n°1894166
swilmet
Posté le 11-06-2009 à 14:40:34  profilanswer
 

C'est pas pour utiliser dans un vrai logiciel, c'était juste un exercice pour m'entrainer ;) Sinon j'aurais utilisé getopt oui en effet.

n°1894197
olivthill
Posté le 11-06-2009 à 15:36:32  profilanswer
 

Il y a deux méthodes :
 
- Soit le nombre de paramètres (argument en anglais) est donné (par exemple int main(agrc, agv[]...)),
- Soit un repère est indiqué (par exemple deux caractères nuls qui se suivent).
 
Ce sont des conventions qui dépendent de ce qui a été décidé.
 
Sinon, si on dépasse les bornes, il n'y a plus de limites.

n°1894203
swilmet
Posté le 11-06-2009 à 15:48:56  profilanswer
 

Ah ok merci, le plus simple alors est que je rajoute un paramètre en plus pour le nombre de chaines.
Et sinon est-ce que argv a un repère à la fin ? Ou bien il faut toujours utiliser argc ?

n°1894212
masklinn
í dag viðrar vel til loftárása
Posté le 11-06-2009 à 16:02:15  profilanswer
 

swilmet a écrit :

Ah ok merci, le plus simple alors est que je rajoute un paramètre en plus pour le nombre de chaines.
Et sinon est-ce que argv a un repère à la fin ? Ou bien il faut toujours utiliser argc ?


Il faut utiliser argc.


---------------
Stick a parrot in a Call of Duty lobby, and you're gonna get a racist parrot. — Cody
n°1894216
swilmet
Posté le 11-06-2009 à 16:24:56  profilanswer
 

Ok merci, il me semblait bien que c'était pas tout à fait propre la manière dont je faisais.

n°1894227
Emmanuel D​elahaye
C is a sharp tool
Posté le 11-06-2009 à 17:12:29  profilanswer
 

swilmet a écrit :

Ah ok merci, le plus simple alors est que je rajoute un paramètre en plus pour le nombre de chaines.
Et sinon est-ce que argv a un repère à la fin ? Ou bien il faut toujours utiliser argc ?


Pour les paramètres de main(int argc, char *argv[]), le langage C garantit que argv[argc] vaut NULL.


Message édité par Emmanuel Delahaye le 11-06-2009 à 17:13:21

---------------
Des infos sur la programmation et le langage C: http://www.bien-programmer.fr Pas de Wi-Fi à la maison : http://www.cpl-france.org/

Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  C

  [résolu] parcours d'un char** sans connaitre le nombre de chaines

 

Sujets relatifs
Désactiver automatiquement des checkbox si on en coche 1 autre[RESOLU]Syntaxe étrange en C++ avec GCC (résolu)
[Résolu] Plusieurs argument dans une url fonction js ajax[Resolu]API MYSQL erreur compilation
Error Javascript:"Object Required"- 5 lignes de code [RESOLU][résolu]Problème de vérification d'un entier
[RESOLU]Fermer une JFrame depuis un Bouton dans un Panel[NON RESOLU] Firefox et scrollTo : un drôle de comportement
[Resolu]Serveur Multi Thread en COpérations sur chaines dans un fichier
Plus de sujets relatifs à : [résolu] parcours d'un char** sans connaitre le nombre de chaines


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR