When you do:
play[i].name = name;
Only the pointer to the buffer is changed, the char* should first point to a valid char[]. Here are some solutions:
1. Switch to C++ and preserver your sanity. Your code is not valid C98 anyway (// comments and intialization not at the top of a function), you might as well use full C++.
2. Allocate a buffer for each player's name using malloc, don't forget to free it when you are done.
3. Declare a static buffer inside the struct:
Code:
struct Player {
    char name[500];
};
if you do this, you MUST check that the name is actually shorter then 500 characters, this can be done by specifying "%499s" as the format for scanf.