在链表中的结构中打印结构

时间:2016-03-28 16:36:21

标签: c struct

我有这样的结构:

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

1 个答案:

答案 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_newoutputData将按预期工作。

<强>更新stockItem_new中,您没有复制componentType的内容,只是指向相同的值。您需要每次都分配一个新缓冲区并传入stockItem_new或使用strdup

进行处理
item->componentType = strdup(componentType);

这将分配足够的内存并复制componentType的内容。您需要对结构中保留的任何字符串执行此操作(因为只复制了地址!)。