1991DBA
1991DBA

Reputation: 805

Easy: Passing data to c program from terminal (Mac)

So, this is a really basic question. For an assignment we had to write a c program that would calculate the page and offset number of a virtual address. My program seems to work fine when I make a vocal variable of the virtual address that we are supposed to do calculations on, but I can't figure out how to pass it.

The assignment says that we should run our program like this

./program_name 19982

I just can't figure out how to pass that 19982 in terminal on my mac. Any help is appreciated. (And in before someone makes a mac joke.)

Upvotes: 3

Views: 14686

Answers (4)

johnsyweb
johnsyweb

Reputation: 141868

It sounds like you are looking for argv, which I suppose is difficult to search for if you don't know what it is called! This isn't specific to Mac OS X's Terminal.

The argv argument of a main() function is an array of strings; its elements are the individual command line argument strings.

The path to the program being run is the first element of argv, that is argv[0].

The number of elements in argv is stored in argc:

#include <stdio.h>

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

Compile:

% gcc program_name.c -o program_name

Run:

% ./program_name 19982
Arg 0 is ./program_name
Arg 1 is 19982

Converting argv[1] to an int is left as an exercise.

Upvotes: 8

Igor
Igor

Reputation: 27258

You can use argc and argv to access program's arguments. argc is the "arguments count" - the number of arguments passed. argv is the "arguments vector", where the first member is the name of the program.

#include <stdio.h>
#include <stdlib.h>
int main( int argc, char* argv[] )
{
    int Address;
    if (argc > 1)
    {
        Address = atoi(argv[1]);
    }
    else 
    {
        printf("No arguments passed\n");
        return 1;
    }
    return 0;
}

Upvotes: 4

Some programmer dude
Some programmer dude

Reputation: 409364

All C (and C++, don't know about objective-c) programs start their execution in the function main. This function takes two arguments: An integer, usually named argc which is a counter of the number of arguments given to the program; The second function argument is an array of char pointers, usually called argv and is the actual command line arguments.

The first entry in argv is always the name of the command itself, which means that argc will always be at least 1.

The following program prints all arguments given on the command line:

#include <stdio.h>

int main(int argc, char *argv[])
{
    printf("Total number of values in argv: %d\n", argc);
    for (int a = 0; a < argc; a++)
        printf("argv[%02d]: %s\n", a, argv[a]);
}

Upvotes: 1

paulsm4
paulsm4

Reputation: 121799

Typically, you'd use "argv/argc" in main. For example:

#include<stdio.h>

int
main (int argc, char *argv[])
{
  if (argc < 2)
    printf ("You didn't enter any arguments\n");
  else
    printf ("Your first argument is %s\n", argv[1]);
  return 0;
}

Under Linux, you'd compile and run like this:

gcc -o hello hello.c
./hello howdy!

Again under Linux, it would output something like this:

Your first argument is howdy!

Upvotes: 1

Related Questions