0

我在现有的源代码库中,链表实现(添加节点、插入、删除、遍历)具有以下结构:

typedef struct tagDirInfo
{
  char *pdirName;
  struct tagDirInfo *__next;
  struct tagDirInfo *__prev;
}DIR_HEADER;

让我们假设 char* pdirName 指向我想要形成数据部分的包装并重用现有 API 的数据部分,因此,新的链表结构的数据部分为:

typedef struct printJob
{
  char labelName[BUF_LEN];
  int priStatus;
  time_t time_stamp;
}PRINTJOB;

我想如果我做类似的事情:

PRINTJOB newJob;
/* Fill in newJob structure */
DIR_HEADER *newNode;
newNode->pdirName = (char*)newJob;
newNode->__next = NULL;
newNode->__prev = NULL;

这样做,将填写链表结构。

但是如何通过链表结构的 pdirName 字段访问 labelName 数据字段呢?

4

2 回答 2

1

您应该使用模板(如果您可以使用 c++)。

char* Labelname = ((PRINTJOB*) newNode->pdirName)->labelName;

顺便说一句, " newJob" 应该是PRINTJOB*not类型PRINTJOB

更好的解决方案如下:

typedef struct _LINKED_LIST {
  struct _LINKED_LIST *_Next;
  struct _LINKED_LIST *_Prev;
} LINKED_LIST;

typedef struct {
    LINKED_LIST List;
    char labelName[BUF_LEN];
    int priStatus;
    time_t time_stamp;
} MY_LINKED_LIST_DATA;

MY_LINKED_LIST_DATA* MyData = (MY_LINKED_LIST_DATA*) 
malloc(sizeof(MY_LINKED_LIST_DATA));
MyData->List->_Next = NULL;
MyData->List->_Prev = NULL;

您的数据始终包含链表特定字段_Next_Prev.

于 2013-07-15T06:43:24.570 回答
1

你的意思是你想做类似的事情:

printf("labelName : %s\n", ((PRINTJOB *)(newNode->pdirName))->labelName);

但是,您的代码有一个错误!要纠正它:

改变

newNode->pdirName = (char*)newJob;

newNode->pdirName = (char*)&newJob;

于 2013-07-15T06:49:13.160 回答