DEV Community

Clifford Mapesa
Clifford Mapesa

Posted on • Originally published at cliffordmapesa.hashnode.dev on

What are argc and argv?

Introduction

Imagine you want to run a program that accepts command-line arguments. Let's consider a program like gcc. To compile an object file named progam we type the following to the command line:

gcc my_program.c -o my_program

Enter fullscreen mode Exit fullscreen mode

The character my_program.c ,-o, my_program are all arguments to the gcc command. (gcc is an argument as well, as we shall see)

Command line arguments in C are very useful. They give a function the ability to pass arguments from the command line. All arguments you pass to the command line end up as arguments to the main function in your program.

Syntax

The main function that accepts command line arguments is written like this:

#include <stdio.h>

int main(int argc, char argv[])
{
    return (0);
}

Enter fullscreen mode Exit fullscreen mode

argc - Stands for "argument count". It represents the count of arguments supplied to the program.

argv - Stands for "argument vector". A vector is a one-dimensional array and argv is a one-dimensional array of strings.

In some functions the argv is declared like this:

#include <stdio.h>

int main(int argc, char **argv)
{
    return (0);
}

Enter fullscreen mode Exit fullscreen mode

The name of an array is converted to the address of its first arguments. Both declarations are similar in this context.

Usage

Let's look at this example:

gcc my_program.c -o my_program

Enter fullscreen mode Exit fullscreen mode

This would result in the following values:

argc: 4
argv[0]: gcc
argv[1]: my_program.c
argv[2]: -o
argv[3]: my_program

Enter fullscreen mode Exit fullscreen mode

As you can see, the first argument (argv[0]) is the name by which the program was called, in this case gcc. Thus, there will always be at least one argument to a program, and argc will always be at least 1.

Example

#include <stdio.h>

/**
 * main - Entry point.
 * @argc: Argument count
 * @argv: Argument vector
 *
 * Return: 0 (Success)
 */
int main(int argc, char *argv[])
{
    printf("Argument count (argc): %d\n", argc); 

    /*Print each command-line argument */
     for (int i = 0; i < argc; i++) 
     { 
         printf("Argument %d: %s\n", i, argv[i]); 
     }
    return (0);
}

Enter fullscreen mode Exit fullscreen mode

If you compile and run this program with the command ./program arg1 arg2 arg3, the output will be:

Argument count (argc): 4 
Argument 0: ./program 
Argument 1: arg1 
Argument 2: arg2 
Argument 3: arg3

Enter fullscreen mode Exit fullscreen mode

Conclusion

In summary, argc and argv are essential for building flexible and versatile C programs that can adapt their behavior based on command-line inputs.

Happy hacking!

Top comments (0)