2016-04-28 81 views
0

我試圖填充項目類型「temp」與數組中的值「temp fields」(包含字符串)我得到的「表達式必須是可修改的左值「我的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

'ptemp-> item_name'是一個數組名稱。你不能分配它。 –

+0

看來,這將是一個很好的時間來了解使用float和/或double時許多值和計算缺乏準確性您可能還想了解在數學中找到的round()函數.h,就像'ceil()'和'floor()' – user3629249

+0

@ user3629249謝謝!! – Beginner

回答

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()之後的顯式空終止,因爲如果沒有足夠的空間,該函數將不會終止輸出。

+0

以及我設法解決這個問題,只添加*到臨時字段和使用strcpy複製字符串。這種方法有問題嗎? – Beginner

+0

如果您問我最新的代碼是否損壞,您必須運行並查看,或者將其編輯爲您的問題。我不知道你的意思是「只添加*到臨時區域」。 –

+0

編輯。現在strtod有問題tho – Beginner

相關問題