我遇到以下代码的问题。
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”错误消息。
我对这些指针做错了什么?
由于
答案 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;
同样适用于allocSize
,array
和datalink
。
如果您只发布了代码片段并且原始代码不有这些问题,那么请告诉我们导致错误的代码行。行号可能不正确。
答案 3 :(得分:0)
可能你刚刚复制的代码也测试了scanf
对1
的回报?然后你的()
错了。实际上,你应该将其纳入if
条款并测试是否成功。