简体   繁体   中英

passing an array of structs from a function to the main program

I have a data file of about 2500 lines. Each line contains 5 parameters. I declare a strut out side of a routine.

typedef struct data
{

char date[9];
char time[3];
float price;
float NAV;
float percent_change;
} _data ;

void readfile(int *j, struct data *input);

void readfile(int *j,struct data *input)

I set aside memory to read each line of the file into an array of structs.

input = calloc(days_of_data,sizeof(*input));
for (i = 0; i< days_of_data; i++)
    input[i] = *(_data*)calloc(1,sizeof(_data));

and read the file.

while(fgets(line, 75, fp) != NULL)
{      

    date = strtok(line,",");
    strcpy(input[i].date,date);
    time = strtok(NULL,",");
    strcpy(input[i].time, time);
    price = strtok(NULL,",");
    input[i].price = atof(price);
    NAV = strtok(NULL,",");
    input[i].NAV = atof(NAV);
    percent_change = strtok(NULL,",");
    input[i].percent_change =  atof(percent_change);
    i--;

}

This works. Now I want to sent the structure to the main program.

int main(int argc, const char * argv[]) {
struct data *input;
readfile(&j, input);
printf("%f\n",input[0].percent_change);
}

This compiles but crashes on the print statement.

You will have to use return value

struct data * readfile(int *j) {
    struct data *input;
    /* read the data */
    return input;
}

int main(int argc, const char * argv[]) {
    struct data *input;
    input = readfile(&j);
    printf("%f\n",input[0].percent_change);
}

or pointer

void readfile(int *j, struct data **input_out) {
    struct data *input;
    /* read the data */
    *input_out = input;
}

int main(int argc, const char * argv[]) {
    struct data *input;
    readfile(&j, &input);
    printf("%f\n",input[0].percent_change);
}

to pass the data to the caller.

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM