Reading command line arguments

Reading command line arguments

How to:

In C, the main function can be designed to accept command line arguments using the parameters int argc and char *argv[]. Here, argc represents the number of arguments passed, and argv is an array of character pointers listing all the arguments. Here’s a quick example to illustrate:

#include <stdio.h>

int main(int argc, char *argv[]) {
    printf("Program Name: %s\n", argv[0]);
    printf("Number of Arguments: %d\n", argc - 1);
    for (int i = 1; i < argc; i++) {
        printf("Argument %d: %s\n", i, argv[i]);
    return 0;

Using the above code, if the program is executed as ./programName -a example, the output would be:

Program Name: ./programName
Number of Arguments: 2
Argument 1: -a
Argument 2: example

This demonstrates how command line arguments can be parsed and utilized in a C program.

Deep Dive

The convention of passing arguments to programs dates back to the earliest days of Unix. In this traditional approach, argc and argv provide a simple yet powerful interface for command line interaction, embodying Unix’s philosophy of small, modular utilities that work together. While modern languages often introduce more sophisticated libraries or frameworks for parsing command-line arguments, the directness of C’s method offers unmatched transparency and control.

In recent developments, libraries such as getopt in POSIX systems have evolved to support more complex parsing needs, like handling long option names or default values for missing arguments. Yet, the basic mechanism of argc and argv remains essential for understanding how programs interact with their run-time environment in C.

Critics might argue that dealing with argc and argv directly can be error-prone, pushing for the use of higher-level abstractions. Nevertheless, for those seeking to master the intricacies of C and appreciate the nuances of its low-level operation, mastering command line argument parsing is a rite of passage. This blend of historical methodology and practical utility encapsulates much of C’s enduring appeal in system programming and software development.