Проблемы с указателями - PullRequest
       2

Проблемы с указателями

0 голосов
/ 13 февраля 2011

У меня проблема со следующим кодом.

int main (int argc, const char * argv[]) {

#define MAXCHARACTERS 10
#define MAXNUMBERS 2

char buffer[MAXCHARACTERS];

numberOfStructs = 0;

allocSize = 10;
array = malloc(allocSize * sizeof(StructItem));
dataLink *link;

do
{
    Album *tempStruct;

    fgets(&(*tempStruct->firstField),MAXCHARACTERS, stdin);
    fgets(&(*tempStruct->secondField), MAXCHARACTERS, stdin);
    fgets(buffer, MAXNUMBERS, stdin);
    sscanf(buffer, "%d", &(tempStruct->thirdField) == 1); // line 26

    link = List(&tempStruct);

    array[numberOfStructs] = (*tempStructs);
    numberOfStructs += 1;

    array = reAllocArray(&array, &allocSize, numberOfstructs);
}
while(link->newStruct != NULL);

printList(&array, numberOfStructs);
freeArray(&array, numberOfStructs);
}

Я получаю предупреждения следующим образом

/ main.c: 26: warning: сравнение между указателем и целочисленным предупреждением: передача аргумента 1 'List' из несовместимого типа указателя

Я получаю несколько сообщений об ошибке "проходящий аргумент 1".

Что я делаю неправильно с этими указателями?

Спасибо

Ответы [ 4 ]

2 голосов
/ 13 февраля 2011

Мне кажется, что вы неправильно используете sscanf, третий параметр, который вы передаете ему, является логическим результатом сравнения адреса с номером 1. Чего вы там пытаетесь достичь?

1 голос
/ 13 февраля 2011
Album *tempStruct;
fgets(&(*tempStruct->firstField),MAXCHARACTERS, stdin);

tempStruct - просто указатель, и вы не должны ничего хранить в этом смещении указателя

&(*tempStruct->firstField) // or just tempStruct->firstField since &* is just cancellation

Я не уверен, как работает этот код, но насколько я знаю, я вижу, что каждая строка, использующая tempStruct, является нарушением доступа без исключения на

link = List(&tempStruct);

и

&(tempStruct->thirdField) == 1

В большинстве случаев будет ЛОЖНО ЛОЖНЫМ, поскольку это просто указатель, который может быть 1 просто случайно.

0 голосов
/ 13 февраля 2011

Возможно, вы только что скопировали код, который также проверяет возврат scanf против 1? Тогда вы неправильно поняли (). И фактически вы должны поместить это в предложение if и проверить его на успех.

0 голосов
/ 13 февраля 2011

Вам не хватает нескольких определений типов.

Например, numberOfStructs = 0; должно быть int numberOfStructs = 0; То же самое относится к allocSize, array и datalink.

Если вы опубликовали только фрагменты своего кода, и у вашего исходного кода нет таких проблем, сообщите нам, какая строка кода вызывает ошибку. Номера строк, скорее всего, неверны.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...