argc et argv en C
-
Utilisez la notation
int argc, char *argv[]
pour obtenir des arguments de ligne de commande en C -
Utilisez
memccpy
pour concaténer les arguments de la ligne de commande en C
Cet article explique plusieurs méthodes d’utilisation des arguments de la ligne de commande, argc
et argv
, en C.
Utilisez la notation int argc, char *argv[]
pour obtenir des arguments de ligne de commande en C
Lorsqu’un programme est exécuté, l’utilisateur peut spécifier les chaînes de caractères séparées par des espaces, appelées arguments de la ligne de commande. Ces arguments sont disponibles dans la fonction main
du programme et peuvent être analysés comme des chaînes individuelles à terminaison nulle. Pour accéder aux arguments, nous devons inclure des paramètres comme int argc, char *argv[]
, représentant le nombre d’arguments passés et le tableau de chaînes contenant les arguments de la ligne de commande. La première chaîne du tableau est le nom du programme lui-même selon la convention ; ainsi, le nombre d’arguments argc
inclut le nom du programme. Nous pouvons imprimer chaque argument de la ligne de commande avec une simple itération à travers le tableau argv
, comme le montre l’exemple suivant.
#include <stdio.h>
#include <stdlib.h>
int main(int argc, char *argv[]) {
for (int i = 0; i < argc; i++) printf("argv[%d] = %s\n", i, argv[i]);
exit(EXIT_SUCCESS);
}
Exemple de commande :
./program hello there
Production :
argv[0] = ./program
argv[1] = hello
argv[2] = there
Le tableau argv
de chaînes de caractères à terminaison nulle est terminé par un pointeur NULL
pour indiquer le dernier argument. Ainsi, nous pouvons utiliser cette fonctionnalité pour implémenter la boucle d’impression des arguments en évaluant le pointeur argv
lui-même et en l’incrémentant jusqu’à ce qu’il soit égal à NULL
. Notez qu’il est préférable de faire un pointeur char*
séparé pour la boucle afin de préserver l’adresse originale du tableau au cas où il serait nécessaire plus tard dans le programme. L’exemple de code suivant suppose que la même commande est exécutée comme dans l’exemple précédent.
#include <stdio.h>
#include <stdlib.h>
int main(int argc, char *argv[]) {
char **ptr;
for (ptr = argv; *ptr != NULL; ptr++) printf("%s\n", *ptr);
exit(EXIT_SUCCESS);
}
Production :
./program
hello
there
Utilisez memccpy
pour concaténer les arguments de la ligne de commande en C
La fonction memccpy
fait partie des utilitaires de chaînes de la bibliothèque standard utilisés pour concaténer les chaînes de tableaux argv
. Notez que memccpy
est similaire à memcpy
sauf qu’il prend le quatrième argument pour spécifier le caractère quand arrêter la copie. Nous exploitons cette dernière fonctionnalité pour copier uniquement le contenu de la chaîne et nous arrêtons à la fin de l’octet nul. Dans l’exemple suivant, nous vérifions si l’utilisateur a fourni précisément deux arguments (à l’exception du nom du programme) et seulement ensuite nous poursuivons l’exécution du programme. Par conséquent, nous enchaînons deux appels memccpy
pour copier les deux arguments et imprimer la chaîne concaténée sur le stdout
.
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main(int argc, char *argv[]) {
if (argc != 3) {
printf("Usage: ./program string1 string2\n");
exit(EXIT_FAILURE);
}
size_t size = strlen(argv[1]) + strlen(argv[2]);
char buf[size];
memccpy(memccpy(buf, argv[1], '\0', size) - 1, argv[2], '\0', size);
printf("%s\n", buf);
exit(EXIT_SUCCESS);
}
Production :
hellothere
Founder of DelftStack.com. Jinku has worked in the robotics and automotive industries for over 8 years. He sharpened his coding skills when he needed to do the automatic testing, data collection from remote servers and report creation from the endurance test. He is from an electrical/electronics engineering background but has expanded his interest to embedded electronics, embedded programming and front-/back-end programming.
LinkedIn Facebook