对于家庭作业,我必须创建一个没有参数的函数,以便用NULL
填充哈希表。
这是表的声明(我不能改变它),以及我如何调用该函数。
#include <stdio.h>
#include <stdlib.h>
#define MAX 10
int main()
{
char* htab[MAX];
htab = mkempty();
}
这是我创建的功能
#include <stdio.h>
#include <stdlib.h>
#define MAX 10
char* mkempty()
{
char* ensemble[MAX];
int i=0;
for (i=0;i<MAX;i++)
{
ensemble[i]=NULL;
}
return ensemble;
}
当我编译它时,我得到了这个:
error: assignment to expression with array type
htab=mkempty();
我理解错误,但我不知道如何填写此表。
声明必须是:char* htab[MAX];
,并且该函数没有任何参数。
答案 0 :(得分:2)
鉴于表格:
char* htab[MAX];
将all设置为NULL的最佳方法是:
memset(htab, 0, sizeof(htab));
如果你需要在函数内部进行,你的函数必须将数组作为指针加上大小:
void mkempty(char** array, size_t count)
{
memset(array, 0, count * sizeof(char*));
}
然后像这样调用:
mkempty(htab, MAX);
现在,有些人会告诉你&#34;归零&#34;指针不一定使其为NULL。这些学员是正确的:memset()
的上述用法在技术上依赖于100%所有机器上可能不正确的东西。具体来说,它不适用于20到50年前制造的一些大型计算机。我认为你的作业不是从20世纪80年代开始在电脑上运行的。
答案 1 :(得分:0)
如果需要进行分配,可以使用指针并动态分配内存。没有参数
char **mkempty(void)
{
return calloc(MAX, sizeof(char *));
}
并在主
char **htop;
htop = mkempty();
答案 2 :(得分:0)
所以我问我的老师,他不想要一个没有争论的功能,这是他给我的表上的一个错误
所以我的功能是:
void mkempty(char** htab[])
{
int i=0;
for (i=0 ; i < MAX ; i++){
*htab[i]=NULL;
}
}