将数组传递给C中的结构

Oli*_*ton 2 c arrays struct c89

为了用整数填充结构(然后在程序中进一步传递),我认为以下方法可行:

main() {
struct songs {int pitch[5], length[5];} songs[4];
int i[5]={1,22,23,14,52};
int k=0;
 songs[0].pitch=i;      
 for (k=0; k<5; k++) printf("%d\n",songs[0].pitch[k]);
}
Run Code Online (Sandbox Code Playgroud)

但是这会出现"错误的分配类型"错误

如果我不将此数组传递给结构,请使用以下命令:

main() {
int i[5]={1,22,23,14,52};
int k=0;   
 for (k=0; k<5; k++) printf("%d\n",i[k]);
}   
Run Code Online (Sandbox Code Playgroud)

它编译并显示数组的内容.

我意识到可能有一个简单的解决方法,但任何帮助都会很棒!

提前致谢

Bil*_*eal 6

C89不允许您将数组分配给另一个数组.这是C99的相关位,但C89中的文字大致相同,只提到了C99的类型_Bool.(我只有C89的纸质版)

简单分配部分

数组不适合任何这些条件 - 它们不是算术类型,它们不是结构或联合类型,它们不是指针1.因此,您不能对它们使用赋值运算符.

但是,您可以使用memcpy.如果您替换此行:

songs[0].pitch=i; 
Run Code Online (Sandbox Code Playgroud)

用这一行:

memcpy(songs[0].pitch, i, sizeof(i));
Run Code Online (Sandbox Code Playgroud)

你会得到你期望的行为.(<string.h>当然包括第一个)


1从技术上讲,6.3.2.1/3表示数组在被看到之前被转换为右值指针operator=,但是仍然禁止这样的赋值,因为6.5.16/2要求赋值的左边是左值.