parcours d'un char** sans connaitre le nombre de chaines [résolu] - C - Programmation
Marsh Posté le 11-06-2009 à 14:32:03
Pourquoi ne pas utiliser getopt(3)
Marsh Posté le 11-06-2009 à 14:40:34
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.
Marsh Posté le 11-06-2009 à 15:36:32
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.
Marsh Posté le 11-06-2009 à 15:48:56
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 ?
Marsh Posté le 11-06-2009 à 16:02:15
swilmet a écrit : Ah ok merci, le plus simple alors est que je rajoute un paramètre en plus pour le nombre de chaines. |
Il faut utiliser argc.
Marsh Posté le 11-06-2009 à 16:24:56
Ok merci, il me semblait bien que c'était pas tout à fait propre la manière dont je faisais.
Marsh Posté le 11-06-2009 à 17:12:29
swilmet a écrit : Ah ok merci, le plus simple alors est que je rajoute un paramètre en plus pour le nombre de chaines. |
Pour les paramètres de main(int argc, char *argv[]), le langage C garantit que argv[argc] vaut NULL.
Marsh Posté le 11-06-2009 à 14:30:15
Bonjour à tous !
Voilà le prototype de la fonction que j'ai écrite :
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 :
Ç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 :
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