У меня есть функцияC- Итерация по массиву структур, передаваемых через пустоту *
struct Analysis reduce (int n, void* results)
Где п число файлов, которые будут проанализированы, и я передаю массив анализа структур к результатам ,
Анализ структура определяется следующим образом:
struct Analysis {
int ascii[128]; //frequency of ascii characters in the file
int lineLength; //longest line in the file
int lineNum; //line number of longest line
char* filename;
}
Я бросил пустоту * как таковой,
struct Analysis resArray[n];
struct Analysis* ptr = results;
resArray[0] = ptr[0];
, но я не могу понять, как перебирать resArray правильно , Я пробовал
for (i = 0; i < n; i++){
printf("lineLength: %d\n", resArray[i].lineLength);
}
с n = 3, и я получаю значения мусора. resArray [0] правильный, но resArray [1] - безумно высокое число, а resArray [2] - всего 0. Почему resArray [1] или resArray [2] не дают правильных значений? Если бы я неправильно увеличивал адрес, тогда это имело бы смысл, но я просто обращаюсь к массиву с определенным индексом. Довольно здесь потеряно!
попробуйте 'ptr [i]' вместо 'resArray [i]'. – BLUEPIXY
Использование 'resArray [0] = ptr [0];' вы копируете первый элемент 'results' в первый элемент' resArray'. Другие значения остаются неинициализированными. – LPs
'Почему бы не resArray [1] или resArray [2] не дать правильные значения' - потому что для этих элементов не выполнялось присвоение? Все, что вы сделали с 'resArray [0] = ptr [0];', вытащили первый элемент. Все остальное * неопределенно * в этом массиве. Но ... зачем вставлять их в другой массив. Что случилось с использованием 'ptr [i] .linelength'? – WhozCraig