Writing a program in C and I am trying to pass two variables into the function kstrextend. Name which is a word or set of characters that is stored in the value kstring and a which is a numeric value, but name is not getting passed into the function at all as far as I can tell and I cannot figure out why. Is something not getting stored correctly? Because the function works just fine I just cannot get name passed in correctly.
Declaration of kstring and name:
kstring name;
char kstring[50]; 
Typedef:
typedef struct
    {
        char *data;
        size_t length;
    } kstring;
Function:
void kstrextend(kstring *strp, size_t nbytes)
{
    char *nwData;
    int lnth=strp->length;
    if(lnth < nbytes)
    {
        // new array allocate with large size and copy data to new array
        nwData = (char *)realloc(strp->data, nbytes);
        // call abort in case of error
        if(nwData == NULL)
        {
            abort();
        }
        //Making strp->data point to the new array
        strp->data = nwData;
        //Setting strp->length to the new size.
        strp->length = nbytes;
        for(int i = 0; i <= lnth; i++)
        {
            printf("\n %s",strp->data);
        }
        // filled with '\0' in remaining space of new array
        for (int lp = lnth; lp < nbytes; lp++)
        {
            strp->data[lp] = '\0';
            printf("\n %s", strp->data[lp]);
        }
    }
}
Portion of main:
    size_t a;
    char * k = kstring;
    printf("\n Enter number: ");
    scanf("%d", &a);
    name.data = (char*)calloc(sizeof(k), 1);
    strcpy(input, k);
    name.length= kstring_length;
    kstrextend(&name,a);
