c - 如何修复字符串数组的条件错误

标签 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 部分始终是被执行的部分。我肯定在这里遗漏了一些东西,任何帮助将不胜感激。

最佳答案

您的代码存在问题:

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

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

int hashIndex = hashfunction1(word)% 7; 

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

hashfunction1(word)%7;

就像:

hashfunction1(word[0])%7;

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

Accessing an array outside its bounds has "undefined behavior".

<小时/>

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

关于c - 如何修复字符串数组的条件错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45528684/

相关文章:

c - 在c代码的非阻塞设计中选择

c - C 中的 malloc() 行为

c - 使用Fatfs写入uint32_t数组

c++ - 从 tcp 服务器打开 8MP H264 流时出现问题

c - 读取输入引脚的状态并显示在 LED 上 - LPC1115

c++ - offsetof 是否需要指针取消引用?

c - 访问结构内数组中的数据时出错

c - fscanf 在行中间找到空白字段后无法正常工作

c - 水库采样算法不起作用

c - 如何避免动态图中出现 "heap pointer spaghetti"?