このプログラムのポインタを配列に変換したいんですけど
C言語初心者です。助けてください。
途中までがんばったのですがどうしてもできません。問題はこの構造体の*name→name[25],*email→email[30]に変換させたいのですが、そのまま変換すると左辺値が必要や移植性のないポインタ変換などのエラーが出てしまいます。どうすればいいですか?教えてください。あと関数getlineと構造体は変えないでください。(指定した部分は除く)
このプログラムは名前、メールアドレス、年齢を保存していき-1を入力した時出力されるというものです。
よろしくお願いします。
入力例
10
hakata
abc@・・・
12
yokohama
dfg@・・・
-1
-1
-1
出力例
-1
-1
-1
12
yokohama
dfg@・・・
10
hakata
abc@・・・
#include <stdio.h>
#include<stdlib.h>
struct node {
char *name;
char *email;
int age;
struct node *next;
} heap[100], *hp = heap;
void getline(char *s,int n)
{
int c;
while(--n>0&&((c=getchar())!=EOF && c!='\n'))
*s++=c;
*s='\0';
}
char* dupstr(char* strg)
{
char* newstr;
newstr=(char*)malloc(sizeof(char)*strlen(strg));
strcpy(newstr,strg);
return newstr;
}
struct node *new(int n ,char* a, char* b)
{
hp->age=n;
hp->email=a;
hp->name=b;
hp->next=NULL;
return hp++;
}
struct node *add(struct node *p, struct node *q)
{
q->next=p;
p=q;
return p ;
}
void print_list(struct node *p)
{
while (p != NULL) {
printf("%d ", p->age);
printf("%s ", p->name);
printf("%s ", p->email);
p=p->next;
}
printf("\n");
}
main()
{
int age,p;
char buf[80],a[80],b[80],*email,*name;
struct node *root=NULL;
while(getline!=NULL)
{
getline(buf,sizeof(buf));
age=atoi(buf);
getline(b,sizeof(b));
getline(a,sizeof(a));
email=dupstr(b);
name=dupstr(a);
root=add(root,new(age,email,name));
if(age==-1)
break;
}
print_list(root);
}
お礼
ありがとうございます。 確かに「3=x」と代入しているようなものですね。