我正在尝试从列表中打印出每个结构的所有成员。我在下面提供了打印功能,以打印出通用列表中的元素。
这是我的列表的结构定义,它位于通用列表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];
};
当我运行程序时,我得到了一堆奇怪的字符。我该如何解决这个问题?
答案 0 :(得分:1)
假设你遗漏了这行
typedef struct client_tag Client;
并假设Client
的字符串保证为空终止,这就是这个想法:
void printItem (const Client* p) {
printf("%s\n", p->id);
}