>addresses[k] = fscanf(pAddressFile, "%s,%s,%s,%s, %s,%d,%d\n",
> pA->last_name, pA->first_name, pA->address,
> pA->city, pA->state, &pA->home_zip_code,
> &pA->work_zip_code);
fscanf returns the number of conversions (an int), not the whole record.
Your updates to the record are via all those & references you pass as additional parameters.
And yes, you need to malloc each record as others have pointed out.
So something like this
Code:
void get_input (address_record* addresses[], int* nr_addresses)
{
int k = 0;
// snip filename stuff for brevity, it was reasonably OK
while( k < MAX_RECORDS && !feof(pAddressFile) )
{
address_record temp;
int result;
result = fscanf(pAddressFile, "%s,%s,%s,%s, %s,%d,%d\n",
temp.last_name, temp.first_name, temp.address,
temp.city, temp.state, &temp.home_zip_code,
&temp.work_zip_code);
if ( result == 7 ) {
addresses[k] = malloc ( sizeof *addresses[k] );
*addresses[k] = temp;
k++;
} else {
// report bad format? try and do some error recovery?
}
}
*nr_addresses = k;
}
A better way of reading the file, which makes the error recovery so much simpler is
Code:
void get_input (address_record* addresses[], int* nr_addresses)
{
char buff[BUFSIZ];
int k = 0;
// snip filename stuff for brevity, it was reasonably OK
while( k < MAX_RECORDS && fgets(buff, sizeof buff, pAddressFile) )
{
address_record temp;
int result;
result = sscanf(buff, "%s,%s,%s,%s, %s,%d,%d\n",
temp.last_name, temp.first_name, temp.address,
temp.city, temp.state, &temp.home_zip_code,
&temp.work_zip_code);
if ( result == 7 ) {
addresses[k] = malloc ( sizeof *addresses[k] );
*addresses[k] = temp;
k++;
} else {
// report bad format?
}
}
*nr_addresses = k;
}