typedef struct {
char manufacturer[SIZE];
char model[SIZE];
int size;
int id;
int qty;
double cost;
double price;
} tv;
void firstSix(tv *tvarr[]);
void firstSix(tv *tvarr[])
{
(*tvarr[0]).manufacturer = "Vizio";
}
我正在制作库存计划。它由一系列结构组成,用于存储有关不同电视的信息。在我的程序中,我需要将六个条目硬编码到数组中,所以我试图创建一个将采用struct数组指针参数的函数。在上面的代码中,我包含了我想要的结构声明,函数原型和函数定义。在相应的顺序中,所有东西都放在main之前和之后。我不明白为什么Visual Studio突出显示函数定义中的代码中的第一个括号,并说“表达式必须是可修改的左值”。我不明白我做错了什么。请帮忙。
答案 0 :(得分:2)
您不能分配这样的数组。你需要做
strcpy ((*tvarr[0]).manufacturer, "Vizio");
确保在将字符串复制到数组时不会超出范围。
您可以提前检查字符串的大小,也可以使用strncpy
来限制要复制的最大字符数。
数组不是可修改的l值。所以基本上你不能把它放在任务的左边。
或者您可能也想将manufacture
定义为char *manufacture
,然后动态分配字符串。
manufacturer = strdup ("Vizio"); //manufacturer is char *
或者根据长度首先分配缓冲区
manufacturer = malloc (sizeof (char) * needed_bytes);
无论何时动态分配缓冲区,只要您使用它,请始终记住将其释放free (manufacturer)
。
答案 1 :(得分:2)
我想你想做点什么
strncpy((tvarr[0])->manufacturer, "Vizio", SIZE - 1);
凯文有它;您不能将字符串分配给指针,您必须将数据复制到数组。我建议strncpy避免在已分配空间的末尾运行。