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]);
}
但是这会出现"错误的分配类型"错误
如果我不将此数组传递给结构,请使用以下命令:
main() {
int i[5]={1,22,23,14,52};
int k=0;   
 for (k=0; k<5; k++) printf("%d\n",i[k]);
}   
它编译并显示数组的内容.
我意识到可能有一个简单的解决方法,但任何帮助都会很棒!
提前致谢
C89不允许您将数组分配给另一个数组.这是C99的相关位,但C89中的文字大致相同,只提到了C99的类型_Bool.(我只有C89的纸质版)

数组不适合任何这些条件 - 它们不是算术类型,它们不是结构或联合类型,它们不是指针1.因此,您不能对它们使用赋值运算符.
但是,您可以使用memcpy.如果您替换此行:
songs[0].pitch=i; 
用这一行:
memcpy(songs[0].pitch, i, sizeof(i));
你会得到你期望的行为.(<string.h>当然包括第一个)
1从技术上讲,6.3.2.1/3表示数组在被看到之前被转换为右值指针operator=,但是仍然禁止这样的赋值,因为6.5.16/2要求赋值的左边是左值.