C错误:占用临时数组的地址

问题描述 投票:0回答:2

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

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

这与在方法声明中声明变量的方式有什么关系吗?

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

printConcatLine((char*[]){ "{", "255", "}" });
c arrays multidimensional-array compound-literals
2个回答
1
投票

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

传递匹配类型

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

0
投票

我正在传递二维字符数组

否,您正在将指针传递给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没有任何机制来检索传递的数组的长度。

© www.soinside.com 2019 - 2024. All rights reserved.