Легко: передача данных в программу c терминала (Mac) - PullRequest
3 голосов
/ 09 ноября 2011

Итак, это действительно простой вопрос. Для назначения нам нужно было написать программу c, которая вычисляла бы номер страницы и смещения виртуального адреса. Кажется, моя программа работает нормально, когда я создаю голосовую переменную виртуального адреса, по которому мы должны выполнять вычисления, но я не могу понять, как ее передать.

В задании говорится, что мы должны запустить нашу программу следующим образом

./program_name 19982

Я просто не могу понять, как передать этот 19982 в терминал на моем Mac. Любая помощь приветствуется. (И до того, как кто-то пошутит.)

Ответы [ 4 ]

6 голосов
/ 09 ноября 2011

Звучит так, будто вы ищете argv, который, я полагаю, трудно найти, если вы не знаете, как он называется! Это не относится к Терминалу Mac OS X.

Аргумент argv функции main() является массивом строк; его элементы - отдельные аргументы командной строки.

Путь к выполняемой программе - это первый элемент argv, то есть argv[0].

Количество элементов в argv хранится в 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;
}

Компиляция:

% gcc program_name.c -o program_name

Run

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

Преобразование argv[1] в int оставлено в качестве упражнения.

4 голосов
/ 09 ноября 2011

Вы можете использовать argc и argv для доступа к аргументам программы.argc - это «количество аргументов» - количество переданных аргументов.argv - это «вектор аргументов», где первый член - это имя программы.

#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;
}
1 голос
/ 09 ноября 2011

Все программы на C (и C ++, не знающие о target-c) начинают выполнение в функции main.Эта функция принимает два аргумента: целое число, обычно называемое argc, которое является счетчиком количества аргументов, переданных программе;Второй аргумент функции - это массив char указателей, обычно называемый argv и являющийся фактическими аргументами командной строки.

Первая запись в argv всегда является именем самой команды, что означаетчто argc всегда будет не меньше 1.

Следующая программа печатает все аргументы, заданные в командной строке:

#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]);
}
1 голос
/ 09 ноября 2011

Как правило, вы бы использовали "argv / argc" в main.Например:

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

В Linux вы бы скомпилировали и запустили так:

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

Снова в Linux вы получите что-то вроде этого:

Your first argument is howdy!
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...