0Pricing
C Academy · Lección

argc y argv

Lectura de argumentos del programa

argc y argv es una lección gratuita de C Academy en CoddyKit. Esta es la lección 1 de 4. Puedes leer la lección completa abajo gratuitamente — luego la practicas en el navegador con un editor de código integrado y un tutor de IA 24/7. Forma parte de la ruta de aprendizaje de C Academy, y tu progreso se sincroniza en la web y la app de CoddyKit. El curso de C Academy incluye 4 lecciones en total.

Los programas reciben argumentos

Cuando ejecuta un programa desde una terminal, puede pasarle palabras adicionales llamadas argumentos de la línea de comandos.

C se los entrega a main mediante dos parámetros: argc (número de argumentos) y argv (vector de argumentos).

#include <stdio.h>

int main(int argc, char *argv[]) {
    printf("This program received %d arguments\n", argc);
    return 0;
}

La firma de main

La forma completa de main es:

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

argc es el número de argumentos. argv es una matriz de punteros a cadenas, uno por argumento.

#include <stdio.h>

int main(int argc, char *argv[]) {
    printf("argc = %d\n", argc);
    return 0;
}

argv[0] es el nombre del programa

El primer elemento, argv[0], es el nombre (o la ruta) que se utiliza para invocar el programa.

Por eso, argc es como mínimo 1 incluso cuando el usuario no pasa argumentos adicionales.

#include <stdio.h>

int main(int argc, char *argv[]) {
    printf("Program name: %s\n", argv[0]);
    return 0;
}

Imprimir todos los argumentos

Puede recorrer los índices del 0 al argc - 1 para visitar cada cadena de argumentos en argv.

#include <stdio.h>

int main(int argc, char *argv[]) {
    for (int i = 0; i < argc; i++) {
        printf("argv[%d] = %s\n", i, argv[i]);
    }
    return 0;
}

argv termina en NULL

Según el estándar de C, se garantiza que argv[argc] es un puntero NULL.

Esto significa que puede recorrer la lista hasta encontrar NULL en lugar de utilizar argc, aunque lo habitual es contar con argc.

#include <stdio.h>

int main(int argc, char *argv[]) {
    char **p = argv;
    while (*p != NULL) {
        printf("%s\n", *p);
        p++;
    }
    return 0;
}

Los argumentos siempre son cadenas

Cada argumento llega como una cadena, incluso los números. Si un usuario pasa 42, recibe el texto "42", no el entero.

Debe convertirlo por su cuenta con funciones como atoi o strtol.

#include <stdio.h>
#include <stdlib.h>

int main(int argc, char *argv[]) {
    if (argc > 1) {
        int n = atoi(argv[1]);
        printf("Number plus one is %d\n", n + 1);
    } else {
        printf("Pass a number\n");
    }
    return 0;
}

Comprobar la cantidad de argumentos

Verifique siempre argc antes de leer argv[i]. Acceder a un índice que está más allá de los argumentos proporcionados produce un comportamiento indefinido.

Una comprobación habitual verifica que se hayan proporcionado suficientes argumentos y muestra un mensaje de uso en caso contrario.

#include <stdio.h>

int main(int argc, char *argv[]) {
    if (argc < 2) {
        printf("Usage: %s <name>\n", argv[0]);
        return 1;
    }
    printf("Hello, %s!\n", argv[1]);
    return 0;
}

Usar un código de salida distinto de cero

Cuando los argumentos son incorrectos, devuelva un valor distinto de cero desde main para indicar el fallo al shell.

Por convención, 0 significa éxito y cualquier otro valor indica que se produjo un error.

#include <stdio.h>

int main(int argc, char *argv[]) {
    if (argc != 3) {
        printf("Need exactly 2 arguments\n");
        return 1;
    }
    printf("Got both arguments\n");
    return 0;
}

Sumar argumentos numéricos

Un ejemplo práctico: sume todos los números pasados en la línea de comandos convirtiendo cada uno con atoi y acumulando el total.

#include <stdio.h>
#include <stdlib.h>

int main(int argc, char *argv[]) {
    int sum = 0;
    for (int i = 1; i < argc; i++) {
        sum += atoi(argv[i]);
    }
    printf("Sum = %d\n", sum);
    return 0;
}

Notación alternativa de argv

Puede encontrar char **argv en lugar de char *argv[]. Como parámetro de una función, ambas formas significan lo mismo: un puntero al primer puntero de cadena.

Ambas permiten indexar con argv[i].

#include <stdio.h>

int main(int argc, char **argv) {
    if (argc > 1)
        printf("First arg: %s\n", argv[1]);
    return 0;
}

Repetir los argumentos

El comando clásico echo simplemente imprime sus argumentos. Esta es una versión mínima que los une con espacios.

#include <stdio.h>

int main(int argc, char *argv[]) {
    for (int i = 1; i < argc; i++) {
        printf("%s", argv[i]);
        if (i < argc - 1) printf(" ");
    }
    printf("\n");
    return 0;
}

Comprobación rápida

Compruebe su comprensión de argc y argv.

Resumen

Ha aprendido cómo leen los programas la entrada de la línea de comandos:

  • main(int argc, char *argv[]) recibe la cantidad y el arreglo.
  • argv[0] es el nombre del programa; los argumentos reales comienzan en el índice 1.
  • argv[argc] es NULL.
  • Los argumentos siempre son cadenas; convierta los números con atoi y valide primero argc.

Preguntas frecuentes

¿La lección «argc y argv» es gratis?

Sí — el texto completo de «argc y argv» es gratis para leer aquí en la web. Para practicarla de forma interactiva (editor de código integrado y tutor de IA 24/7) y desbloquear el resto del curso de C Academy, actualiza a CoddyKit PRO. El curso de C Academy incluye 4 lecciones en total.

¿Qué aprenderé en «argc y argv»?

Lectura de argumentos del programa Practicas C Academy con código real que ejecutas directamente en el navegador, y un tutor de IA 24/7 responde tus preguntas mientras trabajas en la lección.

¿Necesito experiencia previa para empezar C Academy?

No se requiere experiencia previa. C Academy en CoddyKit está estructurado para principiantes hasta estudiantes avanzados, así que puedes empezar aquí o desde el inicio y avanzar a tu ritmo. Esta es la lección 1 de 4.

¿Cuánto tiempo toma la lección «argc y argv»?

La mayoría de las lecciones de CoddyKit toman alrededor de 5–10 minutos. Cada una es compacta e interactiva, así que avanzas constantemente y retomas exactamente por donde dejaste en la web y la app.

¿Puedo escribir y ejecutar código en esta lección de C Academy?

Sí. Cada lección de C Academy incluye un editor de código integrado, así que escribes y ejecutas código real directamente en tu navegador y obtienes retroalimentación instantánea de IA — sin configuración local necesaria.

Todas las lecciones de este curso

  1. argc y argv
  2. Análisis de opciones
  3. getopt
  4. Creación de una herramienta CLI
← Volver a C Academy