2
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";
}

我正在制定一个库存计划。它由一组结构组成,这些结构将存储有关不同电视的信息。在我的程序中,我需要将六个条目硬编码到数组中,因此我正在尝试创建一个函数,该函数将采用结构数组指针参数。在上面的代码中,我包含了我正在尝试制作的结构声明、函数原型和函数定义。一切都按各自的顺序放置在 main 之前和之后。我不明白为什么 Visual Studio 突出显示函数定义内代码中的第一个括号并说“表达式必须是可修改的左值”。我不明白我做错了什么。请帮忙。

4

2 回答 2

2

您不能分配这样的数组。你需要做

strcpy ((*tvarr[0]).manufacturer, "Vizio");

确保将字符串复制到数组中时不会越界。

您可以提前检查字符串的大小,也可以使用strncpy这将限制要复制的最大字符数。

数组不是可修改的左值。所以基本上你不能把它放在作业的左侧。

或者您可能还想定义manufacturechar *manufacture然后动态分配字符串。

manufacturer = strdup ("Vizio"); //manufacturer is char *

或者根据长度先分配缓冲区

manufacturer = malloc (sizeof (char) * needed_bytes);

无论何时动态分配缓冲区,无论何时完成使用它,都要记住释放它free (manufacturer)

于 2013-08-02T03:44:37.117 回答
2

我想你想做类似的事情

strncpy((tvarr[0])->manufacturer, "Vizio", SIZE - 1);

凯文有它;您不能将字符串分配给指针,您必须将数据复制到数组中。我建议 strncpy 避免耗尽分配的空间。

于 2013-08-02T03:47:33.580 回答