I have a simple method that takes in a file name and a pointer to a linked list. There doesn't seem to be anything wrong with the linkedlist. However, I noticed that for some reason, strcpy seems to be failing to overwrite the string that used to be there. With each time that I overwrite the char array, the copy gets worse and worse. **Why is strcpy holding on to previous data?**

```
void readFile(struct record ** recordArray, char inputArray [])
{

struct record ** temp = recordArray;
char theString [100];
char characterInput;
int counter = 0;
counter  = 0;
FILE * infile = fopen(inputArray, "r");

char name [100];
char address [100];
int yearofbirth;
char telno [20];

int target = 0;
/*
0 name
1 address
2 yearofbirth
3 telno
*/

/*If the file exists*/
if (infile != NULL)
{ 
   while (characterInput != EOF)
   {
        characterInput = fgetc(infile);

        if (characterInput == '\n')
        {
            theString[counter] = '\0';

            if (target == 0)/*name*/
            {
                strcpy(name, theString);
                counter = 0;
                target++;
            }
            else if (target == 1) /*address*/
            {
                strcpy(address, theString);
                counter = 0;
                target++;
            }
            else if (target == 2) /*yearofbirth*/
            {
                yearofbirth = atoi(theString);
                counter = 0;
                target++;
            }
            else if (target == 3) /*telephone number*/
            {
                strcpy(telno, theString);
                counter = 0;
                target = 0;
                addRecord(temp, name, address, yearofbirth, telno);
            }
        }
        else /*if the character is not a null line ie its a regular character*/
        {
          theString[counter] = characterInput;  
          counter++;   
        }
   } 
}
else
{
    printf("Error: There has to be a file named: %s\n", inputArray);
}
fclose(infile);

```

}

**INPUT:** 

```
bill
firstaddress
9119398644
1993

tim
birch st.
7567115
1980

roger
wood st drive
4830382
1909

```

**OUTPUT:**

```
Name: bill
Address: firstaddress
Birthyear: 529464052
Telephone Number: 1993398644ss

Name: tim3398644ss
Address: birch st.4ss
Birthyear: 7567115
Telephone Number: 1980115t.4ss

Name: timmy15t.4ss
Address: wood st drive
Birthyear: 4830382
Telephone Number: 1909382 drive

```

**EDIT:**

This is the code that ended up working. Thank you folks.

```
void readFile(struct record ** recordArray, char inputArray [])
{

struct record ** temp = recordArray;
char theString [100];
char characterInput;
int counter = 0;
counter  = 0;
FILE * infile = fopen(inputArray, "r");

char name [100];
char address [100];
int yearofbirth;
char telno [20];

int target = 0;
/*
0 name
1 address
2 yearofbirth
3 telno
*/

/*If the file exists*/
if (infile != NULL)
{ 
   while (characterInput != EOF)
   {
        characterInput = fgetc(infile);

        if (characterInput == '\n')
        {
            theString[counter] = '\0';

            if (target == 0)/*name*/
            {
                strcpy(name, theString);
                counter = 0;
                target++;
            }
            else if (target == 1) /*address*/
            {
                strcpy(address, theString);
                counter = 0;
                target++;
            }
            else if (target == 2) /*yearofbirth*/
            {
                yearofbirth = atoi(theString);
                counter = 0;
                target++;
            }
            else if (target == 3) /*telephone number*/
            {
                strcpy(telno, theString);
                counter = 0;
                target = 0;
                addRecord(temp, name, address, yearofbirth, telno);
            }
        }
        else /*if the character is not a null line ie its a regular character*/
        {
          theString[counter] = characterInput;  
          counter++;   
        }
   } 
}
else
{
    printf("Error: There has to be a file named: %s\n", inputArray);
}
fclose(infile);
}

```