【问题标题】:C error: taking address of temporary arrayC 错误:获取临时数组的地址
【发布时间】:2020-06-07 08:38:38
【问题描述】:

我将二维 char 数组 作为复合文字传递给方法,但收到错误:

错误:获取临时数组的地址

这与在方法声明中声明变量的方式有什么关系吗?还是其他原因?

void printConcatLine(char chunks[][20]) { }

printConcatLine((char*[]){ "{", "255", "}" });

【问题讨论】:

  • 别的东西。这个函数怎么调用?
  • 用函数调用更新。

标签: c arrays multidimensional-array compound-literals


【解决方案1】:

我正在传递一个二维字符数组

不,您将指针传递给char * 指针数组。

正确的版本:

void printConcatLine(char *chunks[]) 
{ 
    while(*chunks) 
    {
        printf("%s", *chunks++);
    }
    printf("\n");
}

int main(void)
{
    printConcatLine((char*[]){ "{", "255", "}", NULL });
}

https://godbolt.org/z/sjxKpj

void printConcatLine(char chunks[][20]) 
{ 
    for(size_t index = 0; strlen(chunks[index]);index++) 
    {
        printf("%s", chunks[index]);
    }
    printf("\n");
}

int main(void)
{
    printConcatLine((char[][20]){ "{", "255", "}", "" });
}

https://godbolt.org/z/76ca71

在这两种情况下,您都需要传递数组的指针数/长度或以某种方式终止它(如我的示例中所示)。 C 没有任何机制来检索传递的数组的长度。

【讨论】:

  • 我尝试了这两种方法,但它们仍然产生相同的错误......
  • @McWayWeb 在这种情况下您的编译器不符合标准,请尝试其他的
【解决方案2】:

“我正在传递一个二维字符数组”--> 编号代码正在传递char * 的地址。

传递一个匹配的类型

// printConcatLine((char*[]){ "{", "255", "}" });
printConcatLine((char[][20]){ "{", "255", "}" });

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-11-05
    • 1970-01-01
    • 1970-01-01
    • 2013-05-05
    • 1970-01-01
    • 2011-03-21
    • 1970-01-01
    相关资源
    最近更新 更多