gpt4 book ai didi

c - 尽管数据类型合适,随机 i 字符仍被打印到我的字符串哈希表中

转载 作者:行者123 更新时间:2023-11-30 14:36:58 25 4
gpt4 key购买 nike

任何人都可以解释为什么我的字符串哈希表程序只是在第一个数组中打印字母 i 而不是 Ben?我没有在任何地方指定 i,所以我非常困惑为什么显示这个结果:

我已正确将数据类型设置为 char 并指定了适当的数组长度,那么为什么该字符串无法识别?

代码:

#include<stdio.h>
#include<stdlib.h>

#define size 7

struct node
{
char data;
struct node *next;
};

struct node *chain[size];

void init()
{
int i;
for(i = 0; i < size; i++)
chain[i] = NULL;
}

void add(char name[])
{
//create a newnode with value
struct node *newNode = malloc(sizeof(struct node));
newNode->data = name[10];
newNode->next = NULL;

//calculate hash key
char key = name[10] % size;

//check if chain[key] is empty
if(chain[key] == NULL)
chain[key] = newNode;
//collision
else
{
//add the node at the end of chain[key].
struct node *temp = chain[key];
while(temp->next)
{
temp = temp->next;
}

temp->next = newNode;
}
}

/*
* return 1, search found
* return 0, Otherwise
*/
int search(int name)
{
char key = name % size;
struct node *temp = chain[key];
while(temp)
{
if(temp->data == name)
return 1;
temp = temp->next;
}
return 0;
}

void print()
{
int i;

for(i = 0; i < size; i++)
{
struct node *temp = chain[i];
printf("chain[%d]-->",i);
while(temp)
{
printf("%c -->",temp->data);
temp = temp->next;
}
printf("NULL\n");
}
}

int main()
{
//init array of list to NULL
init();

add("Ben");



print();

printf("Searching element 10\n");

if(search(10))
printf("Search Found\n");
else
printf("Search Not Found\n");

return 0;
}

结果:

chain[0]-->i -->NULL
chain[1]-->NULL
chain[2]-->NULL
chain[3]-->NULL
chain[4]-->NULL
chain[5]-->NULL
chain[6]-->NULL
Searching element 10
Search Not Found

最佳答案

从语法上讲,您的代码很好。

错误是,您像这样调用add():

add("Ben");

这意味着 4 个字符数组的地址(确切地说:其第一个成员的地址)被赋予 add()。这 4 个字符是:

  1. “B”
  2. 'e'
  3. 'n'
  4. '\0'

现在在 add() 中,您从给定地址的第 11 个字符(偏移量 10)处读取:

newNode->data = name[10];

这称为“越​​界”,在 Java 中(因为您似乎知道这一点)将抛出 IndexOutOfBoundsException。但 C 没有这样的检查,因此代码会读取其中的任何内容。在您的示例中,它是意外的“i”。

关于c - 尽管数据类型合适,随机 i 字符仍被打印到我的字符串哈希表中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57693680/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com