c – calloc的等效代码

在给定的c代码片段中,该行的等效代码是什么
int * count =(int *)calloc(sizeof(int),256); ?
int *getCharCountArray(char *str)
{
   int *count = (int *)calloc(sizeof(int),256);
   int i;
   for (i = 0; *(str+i);  i++)
      count[*(str+i)]++;
   return count;
}

是否可以在不使用calloc的情况下执行此操作?我们如何使用malloc和c中的new来声明这个?

解决方法

calloc基本上等同于malloc,后跟memset将所有数据设置为零字节:
void *like_calloc(size_t size,size_t num) { 
    void *ret = malloc(size * num);

    if (ret)  
        memset(ret,size * num);
    return ret;
}

C为new提供了一种语法,使您可以更简单地执行此操作:

int *count = new int[256]();

注意最后的parens.但是请注意,您通常不希望在C中执行此操作 – 您通常希望编写如下代码

std::vector<int> getCharCountArray(unsigned char const *str) { 
     std::vector<int> count(std::numeric_limits<unsigned char>::max()+1);

     for (int i=0; str[i]; i++)
         ++count[str[i]];
     return count;
}

这显然简化了代码数量,但是有更多的简化,也可能是显而易见的.具体来说,这可以避免代码的其余部分必须跟踪何时不再需要返回值,并且在C版本或使用C中的新版本时根据需要删除内存(但不会更早).

相关文章

本程序的编译和运行环境如下(如果有运行方面的问题欢迎在评...
水了一学期的院选修,万万没想到期末考试还有比较硬核的编程...
补充一下,先前文章末尾给出的下载链接的完整代码含有部分C&...
思路如标题所说采用模N取余法,难点是这个除法过程如何实现。...
本篇博客有更新!!!更新后效果图如下: 文章末尾的完整代码...
刚开始学习模块化程序设计时,估计大家都被形参和实参搞迷糊...