尝试仅使用C

时间:2016-10-03 21:13:35

标签: c pointers struct memcpy

我试图仅使用C将一个硬编码字符串插入到struct的char数组值中,所以我使用了memcpy,跟随另一篇文章中的示例。但出于某种原因,我不断得到一个看起来像地址的输出,我不知道为什么。

我的控制台打印出来:[(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();
}

2 个答案:

答案 0 :(得分:3)

您正在打印指针ptr->month,而不是实际的字符串 请尝试:printf("(%d,%s) ",ptr->key,ptr->month);%s代替%d)。

答案 1 :(得分:2)

尝试

 printf("(%d,%s) ",ptr->key,ptr->month);
而不是“好奇的输出”问题。