【问题标题】:How to find the size of a key/value dictionary in C如何在 C 中查找键/值字典的大小
【发布时间】:2021-12-02 18:41:30
【问题描述】:

我对 C 非常陌生,我正在学习使用结构和指针,但我似乎无法弄清楚我在这里做错了什么。所以我试图找到每次调用主函数时都会重置的字典的大小。当我尝试手动运行代码时,它会说分段错误。有 2 个文件被测试,一个是字典结构和所有函数,一个是主文件。任何帮助将不胜感激。

我在 dict 文件中的代码:

size_t dict_size (const dict_t* dict) {
  dict_list_t* el = dict->head;
  size_t dict_ct = 0;

  while(el){
    dict_ct++;
    el = el->next;
  }
  return dict_ct;

}

以及主文件中的代码:

else if(strncmp(cmd, "siz", 3) == 0) {
       size_t* size =(size_t*) dict_size(dict);
       printf("%ld\n", *size);
    }

【问题讨论】:

  • main() 粘贴的代码中删除所有*。它应该有帮助
  • @tstanisl 谢谢!

标签: c pointers struct


【解决方案1】:

dict_size 返回 size_t,而不是 size_t*。所以这里使用指针是错误的。

你想要这个:

if(strncmp(cmd, "siz", 3) == 0) {
       size_t size = dict_size(dict);
       printf("%zu\n", size);
    }

奖励:

像你这样计算字典大小是低效的。每次添加新条目和删除条目时都应更新字典大小。

【讨论】:

  • Re “像你这样计算字典大小是低效的。每次添加新条目和删除条目时都应更新字典大小。”:如果很少请求字典大小,则每次添加或删除时都更新它是低效的。
  • 谢谢!我很困惑,因为在主体的前面部分调用 get() 和 put() 函数时,使用了指针变量。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-07-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多