【问题标题】:C: Passing an array into a function 'on the fly'C:将数组“即时”传递给函数
【发布时间】:2011-04-14 05:36:45
【问题描述】:

我有一个函数,我想将一个 char* 数组传递给它,但我不想为此创建一个变量,如下所示:

char *bar[]={"aa","bb","cc"};
foobar=foo(bar);

为了解决这个问题,我尝试了这个:

foobar=foo({"aa","bb","cc"});

但它不起作用。我也试过这个:

foobar=foo("aa\0bb\0cc");

编译时会出现警告,如果我执行该程序,它就会冻结。
我也尝试过使用星号和 & 符号,但无法正常工作。

有可能吗?如果有,怎么做?

【问题讨论】:

    标签: c arrays parameter-passing


    【解决方案1】:

    是的,您可以使用复合文字。请注意,您需要为函数提供一些方法来了解数组的长度。一种是最后有一个NULL。

    foo((char *[]){"aa","bb","cc",NULL});
    

    此功能是在 C99 中添加的。

    【讨论】:

    • 因此,如果编译器是 MSVC,则可能不可用。
    • 谢谢,这正是我所需要的。
    【解决方案2】:

    您需要为复合文字声明类型:

    foobar = foo((char *[]){"aa", "bb", "cc"});
    

    【讨论】:

      【解决方案3】:

      有时可变参数就足够了:

      #include <stdarg.h>
      #include <stdio.h>
      
      void func(int n, ...)
      {
        va_list args;
        va_start(args, n);
        while (n--)
        {
          const char *e = va_arg(args, const char *);
          printf("%s\n", e);
        }
        va_end(args);
      }
      
      int main()
      {
        func(3, "A", "B", "C");
        return 0;
      }
      

      但我通常更喜欢 Matthew 和 Carl 建议的方法。

      【讨论】:

        猜你喜欢
        • 2018-11-14
        • 2013-06-26
        • 2014-06-28
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-02-25
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多