expression必须是struct指针的可修改左值

时间:2016-04-28 13:26:19

标签: c pointers struct

我试图填写项目类型" temp"使用数组中的值" temp 字段" (包含字符串)我得到"表达式必须是可修改的左值"我的ptemp指针错误。

typedef struct _item {
   char item_name[ITEM_NAME_LENGTH];
   char department[DEPARTMENT_NAME_LENGTH];
   char expiration_date[EXPIRATION_DATE_STRING_LENGTH];
   double price;
   int available;} Item;

Item create_item(char *s) {
    Item temp, *ptemp;
    ptemp = &temp;
    char temp_fields[5];
    int n = 0;
    n = seperate_fields(s, "_*_", temp_fields);
    ptemp->item_name = temp_fields[0];

任何人都可以解释这是怎么回事?我试图修改指针指向的值。假设可以修改

我感谢任何提前回答的人

用于创建项目的已编辑代码

Item create_item(char *s) {
Item temp, *ptemp;
char *ptrend;
char *temp_fields[5];
int n = 0;
ptemp = &temp;
n = seperate_fields(s, "_*_", temp_fields);
strcpy(ptemp->item_name, temp_fields[0]);
strcpy(ptemp->department,temp_fields[1]);
strcpy(ptemp->expiration_date, temp_fields[2]);
ptemp->price = strtod(temp_fields[3], &ptrend);
ptemp->available = atoi(temp_fields[4]);
return temp;

1 个答案:

答案 0 :(得分:1)

您正在尝试复制字符串,但您无法使用=,因为目标是一个数组,而您无法在C中分配数组。而不是:

ptemp->item_name = temp_fields[0];

你可以这样做:

strncpy(ptemp->item_name, temp_fields, ITEM_NAME_LENGTH);
ptemp->item_name[ITEM_NAME_LENGTH - 1] = '\0';

注意我没有使用temp_fields[0],因为那只是一个字符,这并不是真的有意义。另请注意strncpy()之后的显式空终止,因为如果没有足够的空间,该函数将不会使输出终止。