指针烦恼

时间:2011-02-13 08:44:14

标签: c pointers

我遇到以下代码的问题。

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:警告:指针和整数之间的比较   警告:从不兼容的指针类型

传递'List'的参数1

我收到了一些“传递参数1”错误消息。

我对这些指针做错了什么?

由于

4 个答案:

答案 0 :(得分:2)

在我看来,你误用了sscanf,你传递给它的第三个参数是地址和数字1之间比较的逻辑结果。你想在那里完成什么?

答案 1 :(得分:1)

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。

答案 2 :(得分:0)

您缺少多种类型定义。

例如,numberOfStructs = 0;应为int numberOfStructs = 0;同样适用于allocSizearraydatalink

如果您只发布了代码片段并且原始代码有这些问题,那么请告诉我们导致错误的代码行。行号可能不正确。

答案 3 :(得分:0)

可能你刚刚复制的代码也测试了scanf1的回报?然后你的()错了。实际上,你应该将其纳入if条款并测试是否成功。