结构数组:打印每个结构的所有成员

时间:2016-12-01 06:26:46

标签: c

我正在尝试从列表中打印出每个结构的所有成员。我在下面提供了打印功能,以打印出通用列表中的元素。

这是我的列表的结构定义,它位于通用列表ADT c文件中:

struct list_type {
  void *data;
  int size;
  int capacity;
  int elementSize;
  int (*comparePtr) (void *d1, void *d2);
};

所以在通用列表ADT c文件中,我有这个打印功能:

// client needs to send a pointer to a function capable of printing an element
void printl(ListType listptr, void (*printItem) (void *d)) {
  int i;
  for(i = 0; i < listptr->size; i++) {
    // since we cannot use data[i], we need to calculate the address
    // of the element to be sent to the client's print function
    // since data is of type void, the formula is:
    // the beginning address of the array + (offset x element size)
    printItem(listptr->data + i * (listptr->elementSize) );
    printf(" ");
  }
  printf("\n");
}

我这样调用我的printl函数:

printl(clientList, printItem);

在我的驱动程序文件中,有一个函数可以从列表中打印出一个元素:

void printItem (int* p) {
    printf("%d", *p);
    //`my attempt at printing the members of an individual structure from the list
    // printf("%s", ((Client *)&p)[0]); 
}

这是我的Client结构定义:

struct client_tag {
    char id[5];
    char name[30];
    char email[30];
    char phoneNum[15];
};

当我运行程序时,我得到了一堆奇怪的字符。我该如何解决这个问题?

1 个答案:

答案 0 :(得分:1)

假设你遗漏了这行

typedef struct client_tag Client;

并假设Client的字符串保证为空终止,这就是这个想法:

void printItem (const Client* p) {
    printf("%s\n", p->id);
}