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関数に値を渡す理由がわかりません。

そして、このプログラムにもう1つ問題があります。最初のノードの情報を入力すると、プログラムが機能しなくなります。

私はgccWindowsプラットフォームでコンパイラを使用しています。私を助けてください。ありがとう...

4

2 に答える 2

4

問題はそれではありません。問題は、2番目の引数としてsを渡し*first、charポインタではないことです。ポインタ自体を渡すだけです。*secondstrcpy()charfirstsecond

また、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 に答える