Yes, you must initialize any pointer before you can dereference it.  This means allocating memory for it, or assigning it to already-allocated memory.  That's a universal rule in C, there's no special cases for pointers in structures.  C will not "recursively" allocate memory for you.  Among other things, how would it know how much you need?  Consider your simplified code below
int main(){
    struct Call *calls;
    calls = calloc(1 , sizeof(struct Call));
}
Assuming calloc succeeded, calls now points to a memory block that contains space for a single struct Call, which includes space for the char pointer and int.  However, country itself is still an unintialized pointer, and you must allocate space for it or point it to something already-allocated before you can safely dereference it
calls->country = malloc(25);
if (calls->country == NULL) exit(-1);  // handle error how you want
strcpy(calls->country, "Portugal");
printf("%s\n", calls->country);  // prints Portugal
or something like
char myCountry[] = "Spain";
calls->country = myCountry;
myCountry[0] = 'X';
printf("%s\n", calls->country); // prints Xpain
Also see Do I cast the result of malloc?