Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/67.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C 带字符**val的结构_C_Pointers_Stack - Fatal编程技术网

C 带字符**val的结构

C 带字符**val的结构,c,pointers,stack,C,Pointers,Stack,我正在实现一种bucket堆栈,它使用以下结构作为节点 struct NodeBucket { char** val; struct NodeBucket* next; }; 它的工作方式是,当一个新节点bucket被创建并链接到上一个节点,然后被填充时,每个bucket可以容纳指定数量的值,依此类推。 我在尝试向第一个bucket添加第二个值时遇到了困惑。当我添加第一个值并创建第一个bucket时,使用temp->value=&val将该值设置为输入。现在我不确定如何添加其余

我正在实现一种bucket堆栈,它使用以下结构作为节点

struct NodeBucket {
    char** val;
    struct NodeBucket* next;
};
它的工作方式是,当一个新节点bucket被创建并链接到上一个节点,然后被填充时,每个bucket可以容纳指定数量的值,依此类推。 我在尝试向第一个bucket添加第二个值时遇到了困惑。当我添加第一个值并创建第一个bucket时,使用
temp->value=&val
将该值设置为输入。现在我不确定如何添加其余的输入。我尝试过使用索引(firstBucket->val[1]=val),但这似乎不是正确的方法。我将感谢任何帮助。是的,这是家庭作业,我是C语言的相对初学者,来自Python

编辑

它的工作原理是,每个桶可以容纳指定数量的值

因此,您的bucket必须有足够的存储空间来存储
stack->bucketSize
值,这些值是字符串,因此属于
char*
类型。您没有这样做,事实上,您实际上是在创建一个指向
char*
的指针,并在
val
堆栈上为其分配地址,该地址将在函数返回时消失

struct NodeBucket需要知道它存储了多少项

struct NodeBucket {
    size_t numValues;
    struct NodeBucket* next;
    char** val;
};
您还需要为VAL数组分配空间。按如下方式初始化:

struct NodeBucket* temp = malloc(sizeof *temp);
temp->val = malloc(sizeof(char*) * stack->bucketSize);
temp->numValues = 0;
temp->next = NULL;
按相反的顺序释放所有东西

请注意,我将
val
放在末尾,因为您可以利用将mallocs(和frees)减少为一


然后要添加新字符串,您可以查看
numValues
是否小于
stack->bucketSize
。如果是,则将字符串添加到数组的末尾(
stack->firstBucket->val[numValues]=val
)并递增
numValues
)。如果没有,您将创建一个新的
节点bucket
并将其添加到那里。

您需要向我们展示一些代码,并指出它在哪里损坏/您被添加了我的推送功能。谢谢<代码>临时->val=&val??存储临时变量的地址肯定不是要做的事情。我在那里做的是创建一个bucket,在其中存储val,然后将其附加到堆栈。我可能错了,但那部分似乎运作良好。谢谢你给出了一个非常明确的答案。初始化内存肯定是我忘了的东西。现在,吹毛求疵的部分,我的支柱定义只允许以我最初发布的方式,只有两个值按顺序排列。在我的堆栈结构中,我有一个int-topElt,它与我相信的numvalue基本相同
struct NodeBucket* temp = malloc(sizeof *temp);
temp->val = malloc(sizeof(char*) * stack->bucketSize);
temp->numValues = 0;
temp->next = NULL;