gpt4 book ai didi

c - 初始化结构指针数组的正确方法是什么?

转载 作者:太空宇宙 更新时间:2023-11-04 02:28:19 25 4
gpt4 key购买 nike

我正在尝试实现 trie 数据结构:-

typedef struct tries{
char university[20];
struct tries *path[10];
} tries;

tries* head = (tries*)malloc(sizeof(tries));
head->path = { NULL } ;

每当我尝试将路径数组的所有元素初始化为 NULL 时,我都会收到此错误:-

clang -fsanitize=signed-integer-overflow -fsanitize=undefined -ggdb3 -O0 -std=c11 -Wall -Werror -Wextra -Wno-sign-compare -Wshadow    tries.c  -lcrypt -lcs50 -lm -o tries
tries.c:20:18: error: expected expression
head->path = { NULL } ;
^
1 error generated.
make: *** [tries] Error 1

如何将所有路径数组的元素初始化为 NULL
我在我的插入和搜索函数中使用了这个 NULL 值。

void Search(char* university, char* year, tries* head){
int pos = 0;
int length = strlen(year);
tries* temp = head;

for(int i = 0 ; i < length ; i++){
pos = (int) (year[i]%48);

if(temp->path[pos] != NULL){
temp = temp->path[pos];
} else {
printf("%s Not Found !!\n", university);
return;
}

}

if(strcmp(temp->university, university) == 0){
printf("%s is Presnt.\n", university);
} else {
printf("%s Not Found !\n", university);
}

}

最佳答案

只需使用 calloc()而不是 malloc()你会得到所有0 s 在 char -数组和所有NULL s 进入指针数组。

改变

tries * head = (tries*)malloc(sizeof(tries));

成为

tries * head = (tries*)calloc(1, sizeof(tries));

另请注意

  • 不需要投void -C 中的指针
  • sizeof是运算符不是函数

就这样吧:

tries * head = calloc(1, sizeof (tries));

如果您希望此代码行更健壮,可以在类型更改后幸存下来 head做到这一点

tries * head = calloc(1, sizeof *head);

当你处理 struct 时实际上是可分配的 s 您可以执行以下操作:

const tries init_try = {0};

...

tries * head = malloc(sizeof *head);
if (NULL == head)
exit(EXIT_FAILURE);
*head = init_try;

关于c - 初始化结构指针数组的正确方法是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47606583/

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