Several things to note so that you can work it out.
If you're sticking to C although I have no idea why you would, then pass arrays as pointers to pointers.
void AddGymnast( Gymnast** gymnast, Credentials** credentials, int pos )
...
Instead of trying to read data directly from the user into these arrays read it into some temporary variables first. This will make it easier to see what's going on and will help you later when you want to validate the user input beore allowing it to just write all over memory.
char TempBuffer[ 20 ];
gets( TempBuffer );
memcpy( (*gymnast)[pos].cred[pos].country, TempBuffer, 19 );
printf( "Pais es: %s",(*gymnast)[pos].cred[pos].country );
Of course this will still not work because you have not linked any Credentials structure to the cred member of any of the Gymnasts.
.cred is never set so it will be random and the code will crash or worse. You need to decide how you want to solve this. Either by linking the two arrays together or by using malloc to allocate a Credentials structure for each Gymnast.