2011-11-09 33 views
2

所以,這是一個非常基本的問題。對於任務,我們必須編寫一個c程序來計算虛擬地址的頁面和偏移號。我的程序似乎工作正常,當我做虛擬地址的聲音變量,我們應該做計算,但我不知道如何通過它。簡單:從終端將數據傳遞給c程序(Mac)

分配說,我們應該運行我們的程序是這樣

./program_name 19982 

我只是無法弄清楚如何傳遞19982在終端上我的Mac。任何幫助表示讚賞。 (並在之前有人發了一個mac的笑話。)

+0

你想知道,如何讓你的程序採用數字19982並使用它,而不是創建硬編碼的變量? –

+0

是的,就是這樣。我輸入到終端是 'gcc myprog.c'來編譯然後 '/a.out'來運行 但我不知道把19982放在哪個方程式裏。我的主要設置是接受一個論點,但我不知道如何通過終端。 – solllodolllo

回答

4

這聽起來像你正在尋找argv,我想如果你不知道它叫什麼,我很難搜索!這不是特定於Mac OS X的終端。

函數的參數argv是一個字符串數組;它的元素是單獨的命令行參數字符串。

正在運行的程序的路徑是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留給讀者作爲練習。

1

通常,你會在主要使用「argv/argc」。例如:

#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! 
4

您可以使用argcargv來訪問程序的參數。 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; 
} 
+0

錯誤...缺少一個字符串以int轉換?當然是 –

+0

:)。固定。 –

1

所有的C(和C++,不知道的Objective-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]); 
} 
相關問題