我不怎么做C编程。我正在尝试使用该行
if(strTable[key] ==NULL)
以查找空数组的位置。但似乎它不起作用。谁能告诉我此错误的原因是什么?我想这可能是一个地址,但我不知道该怎么做......
stringtable.h: In function `hasValue':
stringtable.h:32: error: invalid operands to binary ==
stringtable.h:37: error: invalid operands to binary !=
stringtable.h:39: error: invalid operands to binary !=
这是我的代码:
int hasValue(struct stringNode* strTable,char * s,int type)
{
int key;
struct stringNode currentNode;
key = hash(s,type);
if(strTable[key] == NULL) return 0;//line32
currentNode = strTable[key];
while(!(currentNode.content==s&¤tNode.datatype==type))
{
currentNode = strTable[currentNode.nextKey];
if(currentNode) break;//line37
}
if(currentNode)//line39
return 0;
else
return 1;
}
C 数组没有"空"元素。 数组的每个元素都有一些值,该值属于数组的声明元素类型。
例如,给定:
int arr[10] = {10, 20, 30, 40, 50, 60, 70, 80, 90, 100 };
arr
的每个元素都有一些特定的int
值。 没有"缺失"或"空"int
值这样的东西。
如果您有指针数组,则某些元素可以包含空指针。 如果您的程序逻辑将空指针视为"空",这是完全合理的。 (也可以合理地说空指针是有效值。
在您的情况下,您显然有一个包含 struct stringNode
类型元素的数组。 我们不知道struct stringNode
是什么样子的。 如果存在某种类型的可测试值,您的程序逻辑可以将其视为"空",则可以使用它。 如果没有,你将不得不找到一些其他方法来指示空元素 - 或者重组你的程序,这样它就不依赖于将某些元素标记为空。
此外,您的错误消息(感谢您发布这些错误消息(表明您的函数定义在 stringtable.h
中,一个头文件。 头文件应仅包含函数声明,例如:
int hasValue(struct stringNode* strTable,char * s,int type);
完整的定义应该在stringtable.c
,它应该有一个#include "stringtable.h"
指令。
有关如何构建 C 源文件的更多信息,但这超出了此问题的答案范围。 如果你的教科书是体面的,它应该解释它。
该错误字符串通常由它抱怨的运算符后跟,这将是一个有用的信息。
此外,如果您以某种方式突出显示编译器抱怨的行,那将很方便。错误输出应包括源行号。
我不认为if(currentNode)
是合法的,因为currentNode
不是数字或指针。也许你应该在作业之前检查currentNode.nextKey
。(我对你的代码了解不多(
(之后你编辑了问题(:"空"是什么意思? 某个成员是 0? 所有成员都是 0? 一些独特的价值?对于每种可能性,您都可以检查它。