如何在结构中存储未知大小的值数组

How to store an array of values of unknown size in a struct

提问人:Mgert33 提问时间:5/2/2022 更新时间:5/2/2022 访问量:402

问:

我目前有我创建的这个结构,我已经在 main 中初始化了指针。我坚持了解如何向指针添加值然后调整其大小,因为它正在等待用户输入。下面的代码是我在缩短版本中的代码,基本上我想知道如何将 job 的每个值添加到结构中的 jobNum 变量并调整其大小,以便我可以为 jobNum 存储任意数量的值。我对内存分配很陌生。

    typedef struct {
         int* jobNum;
     }JobInfo;

   void get_job(JobInfo* jobCalled, int job){
        jobCalled->jobNum = job;

   }
     void main(int argc, char *argv[]){
         jobCalled.jobNum = malloc(sizeof(int));
    
        while(1){
            //Other Processes
            if (USER_INPUT == 'job'){
                 int job = argv[1];
                 get_job(&jobCalled, job);
           }
        }
    
}
c 动态 malloc 结构 realloc

评论

1赞 Yunnosch 5/2/2022
“我已经初步确定了主要指针。”不,你没有,请阅读你得到的编译器警告和错误。或者提供一个最小的可重复示例来说明您正在描述的内容。
0赞 Aconcagua 5/2/2022
int job = argv[1];是不兼容的赋值,以 。如果你假设参数包含一个整数值,那么你需要先解析 - 如果你也希望有负输入,请参阅 strtoul 或有符号的对应部分。char*int
1赞 Aconcagua 5/2/2022
如果希望指针保存多个值,则需要适当数量的值,即 ,或者,如果您需要数组归零初始化,(否则首选)。建议将分配的元素数量与指针一起存储 - 或者如果有意义,可用元素的总数(-> '容量')和实际包含/使用的元素数量 (-> 'size') - 从C++ STL采用的拟议措辞 - 如果附加大小超过容量,则需要。mallocjobNum = malloc(sizeof(int) * numberOfElements)calloc(numberOfElements, sizeof(int))mallocrealloc

答:

0赞 neutron02 5/2/2022 #1

听起来你很难理解分配。我建议学习链表。基本上简而言之:

typedef struct{
    void *head;
    void *next;
}myType;
void addElem(myType *ptr){
    myType *new = (myType*)malloc(sizeof(myType));
    ptr->next = new;
    new->next = NULL;
}

这是一种做你所谈论的事情的简单方式,其中头部元素指向你的第一份工作,但我相信它适合你学习选角、分配等。您很可能需要创建一个函数来初始化您的头优先作业。如果您要删除元素,您可能还希望使用 free 从列表中取消分配内存。还值得注意的是,最好有一个单独的类型,该类型将是一个单独的元素,以便您只分配一个头部指针,但如果您在理解概念时遇到困难,这种方式会更容易。

评论

3赞 Yunnosch 5/2/2022
链表是第二步。首先,需要指针、分配甚至变量及其作用域的存在作为基础知识。
0赞 neutron02 5/2/2022
@Yunnosch,我同意,但是,我希望能够看到诸如 malloc 之类的概念(链表等)的实现将形成更好的理解。
1赞 Aconcagua 5/2/2022
无论如何,我宁愿从基于数组的数据结构开始。一般来说,这更有效 - 比较 C++ 中 std::vector 和 std::list 的用法......