我有这样的结构:
chmod o+r /data/local/tmp/myfile.txt
这样的结构可存储许多库存物品(链表)
typedef struct stockItem {
char *componentType;
char *stockCode;
int numOfItems;
int price;
} stockItem;
// declaration
stockItem *stockItem_new(char *componentType, char *stockCode, int numOfItems, int price);
这些都在不同的头文件中。
我创建了链表,我想打印掉某些数据,例如:
typedef struct inventory {
struct stockItem item;
struct inventory *next;
}inventory;
编辑:
void outputData(){
// This temporarily takes the location of the structs in the
// linked list as we cycle through them to the end
struct inventory *myInv = pFirstNode;
printf("Current Inventory\n\n");
// Until the ptr reaches a value of NULL for next we'll
// keep printing out values
while(myInv != NULL){
// HERE IS MY PROBLEM HOW DO I PRINT OFF THE COMPONENTTYPE FROM THIS
printf("%s\n\n", myInv->item->compnentType);
// Switch to the next struct in the list
myInv = myInv->next;
}
}
答案 0 :(得分:1)
我们没有看到剩下的代码,但是因为你有stockItem_new
返回指针,所以这是错误的:
typedef struct inventory {
struct stockItem item; ///missing *!
struct inventory *next;
} inventory;
相反,我们需要将其声明为:
typedef struct inventory {
struct stockItem *item;
struct inventory *next;
} inventory;
然后,您可以使用item
功能分配到stockItem_new
,outputData
将按预期工作。
<强>更新强>
在stockItem_new
中,您没有复制componentType
的内容,只是指向相同的值。您需要每次都分配一个新缓冲区并传入stockItem_new
或使用strdup
item->componentType = strdup(componentType);
这将分配足够的内存并复制componentType
的内容。您需要对结构中保留的任何字符串执行此操作(因为只复制了地址!)。