C语言结构体,我这么写为什么错了

#ifndef HERO_H_INCLUDED
#define HERO_H_INCLUDED
#include
#include

typedef struct hero
{
int id;
char name;
char xed;
char work;

}Hero;

void show();
#endif // HERO_H_INCLUDED

#include"hero.h"

Hero hero[]= {1,"abc","f","d"};

void show()
{
int i;
for(i=0;i<4;i++)
{
printf("%d\t%c\t%c\t%c\n",hero[i].id,hero[i].name,hero[i].xed,hero[i].work);
}
}


头文件

#ifndef HERO_H_INCLUDED
#define HERO_H_INCLUDED

typedef struct hero
{
int id;
char name[10];
char xed[2];
char work[2];
}Hero;

#endif // HERO_H_INCLUDED

主程序

#include <stdio.h>
#include"hero.h"
Hero hero[4] = {{1,"abc","f","d"},
                {2,"abc","f","d"},
                {3,"abc","f","d"},
                {4,"abc","f","d"}};

void show()
{
int i;
for(i=0;i<4;i++)
{
printf("%d\t%s\t%s\t%s\n",hero[i].id,hero[i].name,hero[i].xed,hero[i].work);
}
}
int main()
{
show();
return 0;
}

兄弟,首先你要确定你结构体里面的成员变量是要定义为字符串(也就是字符数组)还是字符,
用双引号包起来的叫字符串,比如"abcd","a","ds43"等,对应的输出格式符为%s
用单引号包起来而且只含有一个字母或者数字的叫做字符,比如'a', 'b' , '0' , '3' 等,对应的输出格式符为%c
我假设你的结构体的name是字符串,然后xed和work是字符,那么可以这样定义结构体:
typedef struct hero
{
int id;
char name[16]; //这是字符串
char xed; //这是字符
char work; //这是字符
}Hero;