파일에서 읽은 항목의 포인터 배열이 있습니다. 이 항목은 typedef structs
입니다.포인터 배열을 다시 반복 할 수 없습니다.
파일에 많은 항목이 포함되어 있으므로 배열의 크기를 조정할 수 있습니다.
while (fscanf(fp, "%X %[^\n]", &code, string) != EOF) {
if (list->length >= list->capacity) {
list->capacity *= 2;
list->items = (Item**)realloc(list->items,
list->capacity * sizeof(Item*));
}
item.code = code;
strcpy(item.string, string);
list->items[list->length++] = &item;
}
는 list
가정 및 item
이미 선언됩니다. 공간은 목록에 대해 malloced입니다.
static List * list;
& Item item = { 0, { 0 } };
list
은 필요에 따라 전역 변수입니다.
내가 예를 들어 첫 번째 값을 얻기 위해 시도하여이 완성 목록을 반복하려고하면 :
printf("line %d: %X\t%-89s\n", 1, list->items[0]->code, list->items[0]->string);
내가이에서 파일의 마지막 요소를 얻을 것이다. 그러나 위의 while 루프에이 printf
을 포함 시키려면 원하는 콘솔 출력을 얻습니다 (인덱스가 list->length
인 경우).
왜 이러한 유형의 동작이 발생합니까? 포인터를 횡단하는 것을 잊고있는 것이 있습니까?
결코
list->items
'realloc과 같은 유형입니다을 :
당신이 할 수 있습니다 : 대신
sizeof(type)
의
sizeof *pointer
를 사용하는 그래서 대신도 전형이다 '직접 대상 포인터에 - 항상 temp를 사용하고 NULL을 확인하십시오. – 4386427포인터를 ** 같은 ** 항목은 항상! 매 반복마다'malloc' * new *'Item '을 사용하지 않습니까? 빨간색, 초록색 및 노란색 셔츠를 연속적으로 착용하는 경우 색상이 무지개 인 3 명이 없으며 노란색 셔츠를 착용하고 계십니다. –
'List'와'Item'이 선언되는 방법을 보여줄 필요가 있습니다. 'Item'과'Item *'사이에 엉망이되고있는 것 같습니다 – 4386427