【问题标题】:Easy: Passing data to c program from terminal (Mac)简单:从终端(Mac)向 c 程序传递数据
【发布时间】:2011-12-25 01:12:29
【问题描述】:

所以,这是一个非常基本的问题。对于赋值,我们必须编写一个 c 程序来计算虚拟地址的页数和偏移量。当我为我们应该进行计算的虚拟地址创建一个语音变量时,我的程序似乎工作正常,但我不知道如何传递它。

作业说我们应该像这样运行我们的程序

./program_name 19982

我只是不知道如何在我的 Mac 上的终端中传递 19982。任何帮助表示赞赏。 (在有人开 Mac 玩笑之前。)

【问题讨论】:

  • 你想知道,如何让你的程序获取数字 19982 并使用它,而不是创建硬编码的变量吗?
  • 是的,就是这样。我对终端的输入是 gcc myprog.c 进行编译,然后 /a.out 运行,但我不知道将 19982 放在那个等式中的哪个位置。我的 main 已经设置为接受参数,但我只是不知道如何在终端中传递它。

标签: c macos parameters terminal


【解决方案1】:

听起来您正在寻找argv,如果您不知道它叫什么,我想这很难搜索!这并不特定于 Mac OS X 的终端。

main() 函数的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 留作练习。

【讨论】:

    【解决方案2】:

    您可以使用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;
    }
    

    【讨论】:

    • Err ... 缺少字符串到 int 的转换?
    【解决方案3】:

    通常,您会在 main.js 中使用“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】:

      所有 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]);
      }
      

      【讨论】:

        猜你喜欢
        • 2013-09-05
        • 2015-04-04
        • 1970-01-01
        • 2015-05-20
        • 2018-03-10
        • 2015-10-20
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多