Я пытаюсь вставить стробированную строку в значение массива char в структуре, используя только C, поэтому я использовал memcpy, следуя примеру в другом сообщении. Но по какой-то причине я продолжаю получать то, что выглядит как адрес, как вывод, я не уверен, почему.пытается скопировать строку c в struct, используя только C
Моя консоль печатает: [(2,7532592) (1,7524424)] и другие длинные номера, подобные этому каждый раз. Я проверил так много примеров о том, как скопировать последовательность символов в строку c, и похоже, что это было точно так же. У меня могут быть проблемы с пониманием указателей. Я не уверен, почему он выплескивает значение адреса. Может ли кто-нибудь указать, что я делаю неправильно? Я извиняюсь за недостаток знаний с моей стороны. Мой укороченный вниз код ниже:
struct node
{
int key;
char month[20];
struct node *next;
};
struct node *head = NULL;
struct node *current = NULL;
//display the list
void printList()
{
struct node *ptr = head;
printf("\n[ ");
//start from the beginning
while(ptr != NULL)
{
printf("(%d,%d) ",ptr->key,ptr->month);
ptr = ptr->next;
}
printf(" ]");
}
//insert link at the first location
void insertFirst(int key, char * month)
{
//create a link
struct node *link = (struct node*) malloc(sizeof(struct node));
link->key = key;
memcpy(link->month, month, 20);
link->month[19] = 0; // ensure termination
//point it to old first node
link->next = head;
//point first to new first node
head = link;
}
int main() {
insertFirst(1,"Jan");
insertFirst(2,"March");
printf("Original List: ");
//print list
printList();
}
Примечание 'link-> month [19] = 0;' является хорошей идеей для обеспечения завершения нулевого символа. Рассмотрим альтернативы, которые избегают _magic numbers_. 'memcpy (link-> month, month, sizeof link-> month); link-> month [sizeof link-> month - 1] = 0; 'или' link-> month [0] = 0; strncat (link-> month, month, sizeof link-> month); ' – chux
спасибо, хороший совет! – 2316354654