如何确定数组的一个位置是否为空?我有错误:二进制操作数无效



我不怎么做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&&currentNode.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? 一些独特的价值?对于每种可能性,您都可以检查它。

相关内容

最新更新