0
#include<stdio.h>
#include<stdlib.h>
#include<ctype.h>
#include<string.h>

struct person *create_node(char *, char *,int);
void addnode(char *,char *,int,struct person *);


struct person
{
   char fname[20];
   char sname[20];
   int pno;
   struct person *next,*prev;
};

struct person *create_node(char *first,char *second,int mob)
{
   struct person *pnode=(struct person *)malloc(sizeof(struct person));
   strcpy(pnode->fname,*first);
   strcpy(pnode->sname,*second);
   pnode->pno=mob;
   pnode->next=pnode->prev=NULL;

  return pnode;

 }

 void addnode(char *first,char *second,int mob,struct person *pnode)
 {
   while(pnode->next!=NULL)
   {
        pnode=pnode->next;
   }
   pnode->next=create_node(first,second,mob);
   pnode->next->prev=pnode;

 }

 int main()
 {
   struct person *root=NULL;
   char choice='y';
   char first[20];
   char second[20];
   int mob;

   while(tolower(choice)=='y')
  {
        printf("enter the first name:");
    scanf("%s",first);

    printf("enter the second name:");
    scanf("%s",second);

    printf("enter the mobile no:");
    scanf("%d",&mob);

    if(root==NULL)
    root=create_node(first,second,mob);
    else
    addnode(first,second,mob,root);
    printf("enter the option to continue or end(y or n):");
    scanf("%c",&choice);
    fflush(stdin);
  }

  return 0;
  } 

这是我编写的程序,它的基本作用是,它将创建链表,从用户那里获取结构的值。

当我从函数运行这个程序时,我收到了 2 个类似的警告

    struct person * create_node(char *, char *, int),
    passing char to argument 2 of strcpy(char *, const char *) lacks a cast

我不明白为什么它将值传递const给函数。

这个程序还有一个问题。在我输入第一个节点的信息后,程序停止工作。

gcc在 Windows 平台上使用编译器。请帮帮我。谢谢...

4

2 回答 2

4

问题不在于。问题是您传递*first*second第二个参数strcpy()chars 而不是 char 指针。您必须简单地传递firstand second,指针本身。

另外,请不要强制转换 malloc 的返回值。

于 2012-09-23T05:27:22.747 回答
2

这里:

struct person *create_node(char *first,char *second,int mob)
{
   // ...
   strcpy(pnode->fname,*first);
   strcpy(pnode->sname,*second);
   // ...
   return pnode;
}

first并且second是指针(指向char)。没有理由取消引用它们*并提取字符。strcpy()将指针作为其参数。first并且second是好的strcpy()

于 2012-09-23T05:30:06.917 回答