argc y argv en C

Jinku Hu 12 octubre 2023
  1. Utilice la notación int argc, char *argv[] para obtener argumentos de la línea de comandos en C
  2. Utilice memccpy para concatenar argumentos de la línea de comandos en C
argc y argv en C

Este artículo explicará varios métodos de uso de argumentos de línea de comandos, argc y argv, en C.

Utilice la notación int argc, char *argv[] para obtener argumentos de la línea de comandos en C

Cuando se ejecuta un programa, el usuario puede especificar las cadenas separadas por espacios llamadas argumentos de la línea de comandos. Estos argumentos están disponibles en la función main del programa y se pueden analizar como cadenas individuales terminadas en nulo. Para acceder a los argumentos, debemos incluir parámetros como int argc, char *argv[], que representan el número de argumentos pasados ​​y el array de cadenas que contienen los argumentos de la línea de comandos. La primera cadena del array es el nombre del programa en sí mismo según la convención; así, el número de argumentos argc incluye el nombre del programa. Podemos imprimir todos los argumentos de la línea de comandos con una iteración simple a través del array argv, como se demuestra en el siguiente ejemplo.

#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);
}

Comando de muestra:

./program hello there

Producción :

argv[0] = ./program
argv[1] = hello
argv[2] = there

el array argv de cadenas terminadas en nulo se termina con un puntero NULL para indicar el último argumento. Por lo tanto, podemos utilizar esta función para implementar el bucle de impresión de argumentos evaluando el puntero argv e incrementándolo hasta que sea igual a NULL. Tenga en cuenta que es mejor crear un puntero char* separado para el bucle para preservar la dirección original del array en caso de que sea necesario más adelante en el programa. El siguiente código de muestra asume que se ejecuta el mismo comando que en el ejemplo anterior.

#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);
}

Producción :

./program
hello
there

Utilice memccpy para concatenar argumentos de la línea de comandos en C

La función memccpy es parte de las utilidades de cadena de biblioteca estándar que se utilizan para concatenar las cadenas de array argv. Tenga en cuenta que memccpy es similar a memcpy excepto que se necesita el cuarto argumento para especificar el carácter cuando dejar de copiar. Aprovechamos la última característica para copiar solo el contenido de la cadena y detenernos al terminar el byte nulo. En el siguiente ejemplo, verificamos si el usuario proporcionó exactamente dos argumentos (excepto el nombre del programa) y solo entonces continuamos con la ejecución del programa. En consecuencia, encadenamos dos llamadas memccpy para copiar ambos argumentos e imprimir la cadena concatenada en 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);
}

Producción :

hellothere
Autor: Jinku Hu
Jinku Hu avatar Jinku Hu avatar

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

Artículo relacionado - C Process