我收到此错误:
incompatible types when assigning to type ‘char[100]’ from type ‘char *’
当我尝试编译时:
struct libro {
char titolo[100];
char autore[50];
int anno_pubblicazione;
float prezzo;
};
typedef struct libro Libri;
int main (void) {
Libri scaffale[150];
scaffale[1].titolo = "last of mohicans";
printf("\n%s\n",scaffale[1].titolo);
return 0;
}
我想知道如何为数组的指定成员上的特定字段分配值。
最佳答案
在C99中,可以使用指定的初始化程序:
Libri scaffale[150] = { [1] = {"last of mohicans"} };
您的代码的问题在于数组不可分配。可以初始化数组,并且初始化使用与赋值类似的语法,但这不是一回事。
如果确实需要分配,那么在C中要做的就是编写一个分配数组中各个元素的循环。或使用预先存在的函数执行此操作(如果数组类型如此可用)。对于以null结尾的char数组,有一个名为
strcpy
的函数。虽然C ++继承了原始数组的所有C问题以实现兼容性,但是在C ++中,您可以使用
std::array
来获得具有更合理行为的数组:它们是可复制的,可分配的,使用传递值语法实际上是这样做的,而不是插入一些奇怪地转换为指向数组第一个元素的指针,等等。并且C ++ std::array
类型与原始数组相比的开销为零:std::array
将导致与原始数组相同的对象布局和代码生成。合理的数组类型的可用性是在C上使用C ++的一个很好的理由。当然,在这种情况下,很可能在C ++中将
titolo
和autore
改为string
而不是数组,在这种情况下会存在性能差异,因为表示形式与原始数组并不相同。性能的好坏取决于确切的程序数据。由于表示形式更紧凑(较小的字符串优化),因此性能可能会更好,或者如果字符串数据太大,性能可能会变慢,并且最终会分配大量内存。关于c - 如何为结构数组赋值,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/27827394/