如何从字符串数组中修复条件错误

时间:2017-08-06 05:00:27

标签: c

所以我将一个字符串数组声明为 typedef char String[11];,在我的main函数中我有这个条件  `

char word[12];
String hashArray[SIZE];

if (insertword(word, hashArray) == 1)
  printf("word %s successfully inserted.\n", word); 

这是它调用的函数。

int insertword(char word[], String hashArray[]) 
{

   //get the hash 
   int hashIndex = hashfunction1(word)% 7 ; 
   printf("INDEX:%d\n", hashIndex); //delete later

   if (hashArray[hashIndex] == NULL) //ERROR IS HERE
   {
        strcpy(hashArray[hashIndex], word);
        printf("INSERTED!!  ");
        return 1;
   }
   else 
   {
        printf("NOT INSERTED!!  ");
        return 0;
   }
}

我通过添加打印来测试我的程序,显然错误发生在第一个条件语句中。 else部分始终是执行的部分。我在这里肯定遗漏了一些东西,任何帮助都会受到赞赏。

1 个答案:

答案 0 :(得分:1)

您的代码存在问题:

char word[12];
String hashArray[SIZE];

word未初始化,因此它具有垃圾值。
然后在insertword函数内:

int hashIndex = hashfunction1(word)% 7; 

数组“衰减”成指向第一个元素的指针:

hashfunction1(word)%7;

就像:

hashfunction1(word[0])%7;

再次,word未初始化,因此值将被放入hashIndex未知!
然后,您正在访问该索引中的数组hashArray[hashIndex],该数组未知,可能超出边界。

  

访问其边界之外的数组具有“未定义的行为”。

要解决此问题,您需要在word数组中放置一些小于 32 的随机值,如评论size = 32中所述。