2016-10-03 4 views
1

Я пытаюсь вставить стробированную строку в значение массива 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(); 
} 
+0

Примечание '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

+0

спасибо, хороший совет! – 2316354654

ответ

2

Попробуйте

printf("(%d,%s) ",ptr->key,ptr->month); 

вместо этого проблемы "любопытный выход".

+0

дал вам лучший ответ, так как вы были первым – 2316354654

3

Вы печатаете указатель ptr->month, а не фактическую строку.
Попытка: printf("(%d,%s) ",ptr->key,ptr->month); (%s вместо %d).

+0

WOWWWWWW спасибо, я не использовал C в течение длительного времени. – 2316354654

 Смежные вопросы

  • Нет связанных вопросов^_^