Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
2168 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]


---------------
I mean, true, a cancer will probably destroy its host organism. But what about the cells whose mutations allow them to think outside the box by throwing away the limits imposed by overbearing genetic regulations? Isn't that a good thing?
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.


---------------
I mean, true, a cancer will probably destroy its host organism. But what about the cells whose mutations allow them to think outside the box by throwing away the limits imposed by overbearing genetic regulations? Isn't that a good thing?
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-2025 Groupe LDLC (Signaler un contenu illicite / Données personnelles)