【问题标题】:C: Store parameter passed when calling mainC:存储调用main时传递的参数
【发布时间】:2018-11-19 15:12:43
【问题描述】:

我想知道编译时如何在C中存储参数:

例如:我想存储 2 个用户输入的字符串变量。 main 是这样调用的:

./main "Hello World!" World

我们应该存储“Hello World!”在string1string2 中的“世界” (假设我们只能使用main函数,没有head函数),不使用指针。

编辑:这是我仍然无法工作的代码:

#include <stdio.h>
#include <err.h>

int  
main (int argc, char *argv[]) 
{
    if (argc != 2)
    { 
    errx(1, "Error");
    }
    printf("Number of arguments = %i\n", argc);
    for (int k = 0; k < argc; k += 1)
        {
        printf("argv[%i] = %s\n", i, argv[i]);
        }
return 0;
}

【问题讨论】:

  • 您可以发布您尝试过的任何代码吗?或者您在运行代码时收到的任何错误消息?
  • 我无法测试它,因为我无法存储变量
  • 是否可以在不使用指针的情况下做到这一点(完全)
  • Mr Bowling 我看过这个,但不明白这两个字符串是如何存储的,如何存储?
  • 如果不使用指针,您将无法在 C 中执行此操作。您将需要它们从命令行和字符串传递参数。

标签: c string variables


【解决方案1】:

实际上main 声明是int main(int argc, char **argv);int main(int argc, char *argv[]);,其中:

  • argc 是传递的参数数量
  • **argv*argv[] 包含要传递的参数

所以你必须使用指针来传递参数(因为 main 被声明),没有其他方法。在您的示例 (./main "Hello World!" World) 中,程序将收到:

  • argc 是 3
  • argv[0] 是 ./main
  • argv[1] 是 Hello World!
  • argv[2]是世界

【讨论】:

  • 好的,谢谢。但不知何故,我在打印时遇到错误......我做了 printf("argv[%i] = "%s", i, argv[i]") 但它给了我一个错误
  • @quiasdesamis2:除了你省略了格式字符串末尾的换行符之外,你到处都有杂散的双引号。考虑使用单引号,或者对要出现在格式字符串中的每个 " 使用 \"。您需要更多类似:printf("argv[%i] = \"%s\"\n", i, argv[i]); — 请注意,这会删除 comment 中显示的尾随双引号:printf("argv[%i] = "%s", i, argv[i]")
  • 试试printf("argv[%u] = %s\n", i, argv[i]);,我是 [0-2] 范围内的无符号数
  • 它仍然给我 2 个错误,位于 > i 和 >argv[i]
  • 我已经编辑了我的问题,请看一下它没有编译
猜你喜欢
  • 2017-01-03
  • 1970-01-01
  • 2013-10-17
  • 2016-11-19
  • 2015-08-22
  • 2016-01-15
  • 2016-04-04
  • 2018-01-31
  • 2013-09-21
相关资源
最近更新 更多