Извините, если это действительно простой вопрос, но я действительно ржавый в Си, и поиск в Google не помог до сих пор. У меня есть функция C, которая принимает массив структур и целое число:
int foo(struct record *records, int n)
{
}
, а также связанный список, в котором каждый узел имеет структуру:
struct rnode
{
struct record rec;
struct rnode *next;
}
и запись структуры:
struct record
{
enum recordtype type;
union recordvalue
{
int intval;
char strval[19];
} value;
};
внутри foo (struct record , int ) Я перебираю связанный список и назначаю первые "n" записи struct в массив, например:
int foo(struct record *records, int n)
{
int count = 0;
struct rnode *cur = recordlist;
while(cur != NULL)
{
records[count] = cur->rec; //Basically, how do I write this line?
printf("%d\n", records[count].type); //Both these print the correct values
printf("%d\n", records[count].value.intval); //Prints correct values
count++;
}
}
Я пытался сделать:
records [count] = cur-> rec
, который компилируется, но когда я делаю следующее:
struct record *records = malloc(sizeof(struct record)*n);
foo(records, n); //This should populate the array records but it isn't.
//If I print record[0].value.intval here I get 0.
но когда я передаю & записывает [0] в другую функцию, например:
checkrecord(&record[0]);
, где объявлена контрольная запись:
checkrecord(const struct record *r)
внутри этой функции r-> type и r-> value.intval оба возвращают 0 вместо правильного значения.
Я почти уверен, что правильно храню запись struct в массиве, но я не уверен, что еще я делаю неправильно.
Я не хочу показаться упрямым, но проблема в том, что функцию checkrecord () я не могу изменить, но я могу изменить способ передачи параметров ей.