双方向リストに文字列を蓄えたいんですが、

struct s{
char *name;
struct s *prev;
struct s *next;
}aiu;
・・・
aiu data;
char buf[100]

scanf("%s", buf);
data.name = buf;
addtail(data);
・・・
addtailはリストを作る関数です。
でこの三つの文をぐるぐる回していれていったんですが、表示するときに
最後に入れた文字列ばっかりが表示されます。文字列ではなくて一文字
だけとか、入力させずに、data.name="abc"というようにプログラム中でそ
のまま指定した場合は、そのとおりに表示されました。なので上のプログ
ラムがおかしいと思うのですが。