所以,這是一個非常基本的問題。對於任務,我們必須編寫一個c程序來計算虛擬地址的頁面和偏移號。我的程序似乎工作正常,當我做虛擬地址的聲音變量,我們應該做計算,但我不知道如何通過它。簡單:從終端將數據傳遞給c程序(Mac)
分配說,我們應該運行我們的程序是這樣
./program_name 19982
我只是無法弄清楚如何傳遞19982在終端上我的Mac。任何幫助表示讚賞。 (並在之前有人發了一個mac的笑話。)
所以,這是一個非常基本的問題。對於任務,我們必須編寫一個c程序來計算虛擬地址的頁面和偏移號。我的程序似乎工作正常,當我做虛擬地址的聲音變量,我們應該做計算,但我不知道如何通過它。簡單:從終端將數據傳遞給c程序(Mac)
分配說,我們應該運行我們的程序是這樣
./program_name 19982
我只是無法弄清楚如何傳遞19982在終端上我的Mac。任何幫助表示讚賞。 (並在之前有人發了一個mac的笑話。)
這聽起來像你正在尋找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
留給讀者作爲練習。
通常,你會在主要使用「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!
您可以使用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;
}
錯誤...缺少一個字符串以int轉換?當然是 –
:)。固定。 –
所有的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]);
}
你想知道,如何讓你的程序採用數字19982並使用它,而不是創建硬編碼的變量? –
是的,就是這樣。我輸入到終端是 'gcc myprog.c'來編譯然後 '/a.out'來運行 但我不知道把19982放在哪個方程式裏。我的主要設置是接受一個論點,但我不知道如何通過終端。 – solllodolllo