C - Argumentos de linha de comando

É possível passar alguns valores da linha de comando para seus programas C quando eles são executados. Esses valores são chamadoscommand line arguments e muitas vezes eles são importantes para seu programa, especialmente quando você deseja controlá-lo de fora, em vez de codificar permanentemente esses valores dentro do código.

Os argumentos da linha de comando são tratados usando argumentos de função main () onde argc refere-se ao número de argumentos passados, e argv[]é um array de ponteiros que aponta para cada argumento passado para o programa. A seguir está um exemplo simples que verifica se há algum argumento fornecido a partir da linha de comando e age de acordo -

#include <stdio.h>

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

   if( argc == 2 ) {
      printf("The argument supplied is %s\n", argv[1]);
   }
   else if( argc > 2 ) {
      printf("Too many arguments supplied.\n");
   }
   else {
      printf("One argument expected.\n");
   }
}

Quando o código acima é compilado e executado com um único argumento, ele produz o seguinte resultado.

$./a.out testing
The argument supplied is testing

Quando o código acima é compilado e executado com dois argumentos, ele produz o seguinte resultado.

$./a.out testing1 testing2
Too many arguments supplied.

Quando o código acima é compilado e executado sem passar nenhum argumento, ele produz o seguinte resultado.

$./a.out
One argument expected

Deve-se notar que argv[0] contém o nome do próprio programa e argv[1]é um ponteiro para o primeiro argumento da linha de comando fornecido e * argv [n] é o último argumento. Se nenhum argumento for fornecido, argc será um, e se você passar um argumento, entãoargc é definido como 2.

Você passa todos os argumentos da linha de comando separados por um espaço, mas se o próprio argumento tiver um espaço, você pode passar esses argumentos colocando-os entre aspas duplas "" ou aspas simples ''. Vamos reescrever o exemplo acima mais uma vez, onde imprimiremos o nome do programa e também passaremos um argumento da linha de comando colocando aspas duplas -

#include <stdio.h>

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

   printf("Program name %s\n", argv[0]);
 
   if( argc == 2 ) {
      printf("The argument supplied is %s\n", argv[1]);
   }
   else if( argc > 2 ) {
      printf("Too many arguments supplied.\n");
   }
   else {
      printf("One argument expected.\n");
   }
}

Quando o código acima é compilado e executado com um único argumento separado por espaço, mas entre aspas duplas, ele produz o seguinte resultado.

$./a.out "testing1 testing2"

Progranm name ./a.out
The argument supplied is testing1 testing2