所以我将一个字符串数组声明为
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/