Comment passer des arguments du terminal à une fonction

Dupliquer possible:
Passer des arguments au programme C depuis la ligne de commande

J’essaie de passer trois arguments du terminal dans une fonction appelée remplacer. J’aimerais savoir s’il est possible de faire ce qui suit à partir du terminal

% ./replace d DDD mytest.tx 

J’ai regardé en ligne mais je ne peux trouver que des informations sur le fait de transmettre des valeurs directement à main () et non sur la fonction à l’intérieur.

Edit: J’ai édité les fonctions principales comme suit:

 void replace(char* ssortingng_a, char* ssortingng_b, char* ssortingng_f) { } int main(int argc, char *argv[]) { if(argc < 4) { printf("Not enough arguments\n"); return 0; } replace(argv[1],argv[2],argv[3]); } 

Votre fonction principale devrait être au format:

 int main ( int argc, char *argv[] ) 

argv est un pointeur sur vos arguments. Notez que le premier argument est le nom de votre programme.

Voici une leçon sur les arguments en ligne de commande:

Bien sûr, le prototype principal est int main(int ac, char **av) où ac est le nombre d’arguments transmis au programme et char ** est un tableau de tableaux contenant les arguments transmis au programme.

Par exemple pour votre code:

 int main(int ac, char **av) { void replace (av[1], av[2], av[3]) { ....... } } 

Si vous lancez votre exec sous: ./replace d DDD mytest.tx , av [0] sera le nom de votre programme, av [1] sera d , av [2] DDD et av [3] mytest.tx

Bonne chance !

Tous les programmes C propres autonomes commencent leur exécution dans main() . C’est comme ça que la langue fonctionne.

Vous devez donc appeler replace() depuis main() , après avoir vérifié et interprété les arguments. Les arguments de ligne de commande seront dans les parameters standard int argc, char *argv[] de main() .

Ce que vous voulez faire, c’est utiliser main liste d’arguments de main .

Vous pouvez utiliser la signature suivante:

int main(int argc, char* argv[]) , où argv est un pointeur sur la liste des arguments, transmis à partir de la ligne de commande.

Recherchez argc et argv .

argc est le nombre d’arguments et argv est un tableau de pointeurs vers vos arguments.

donc votre code devrait ressembler à quelque chose comme ça:

 void replace (char ssortingng_a[],char ssortingng_b[], char ssortingng_f[]) { //... } int main(int argc, char *argv[]) { if(argc < 4) { printf("Not enough arguments\n"); return 0; } replace(argv[1], argv[2], argv[3]); } 

Rappelez-vous également que le premier élément de argv ( argv[0] ) est le chemin du programme en cours d'exécution.

Pour répondre à votre question exacte: I am trying to pass three arguments from terminal into a function called replace. Non, vous ne pouvez pas contourner l’envoi des arguments à main.

Le langage C est défini de manière à rechercher un point d’entrée main() dans le programme. Il se plaint si vous n’en avez pas. Puisque main() est censé être présent, il est utilisé comme point d’entrée pour tout argument de ligne de commande:

 [void | int] main(int argc, char *argv[]) 

argc est le nombre d’arguments en ligne de commande et argv[] est un tableau de pointeurs de caractères (versions “chaîne” de votre liste d’arguments)

Si vous voulez les remplacer pour les remplacer, il vous suffit de les envoyer directement:

 int main(int argc, char *argv[]){ if argc is big enough to satisfy replace(argv's) 

Si vous ne voulez vraiment pas que main() connaisse les arguments, vous devez les stocker dans un fichier ou les obtenir au moment de l’exécution à partir de stdin partir de votre fonction replace() .

Si vous essayez d’avoir “remplacer” BE comme fonction principale, cela peut être possible si votre éditeur de lien vous permet de définir le point d’entrée.

Encore une fois … je ne sais pas vraiment quel est votre objective.