我正在尝试编写一个将基数为10的整数转换为二进制数的函数。
我像这样构造函数:
void dec2bin(int dec, char * bin);该函数将通过参数中的指针存储二进制结果。它被传递给一个在别处声明的变量,如下所示:
char *r1 = (char *)malloc(24);该函数必须做的第一件事是用全零填充"24位结果“。它现在工作得很好,因为我已经根据我知道的“大小”对它进行了编码,但我不知道如何确定任意"r1“的”大小“。我认为使用sizeof函数的每一种方法都不会给我24。
在这一点上,我感到困惑,并且没有将字符、字符*等的各自大小之间的关系与如何使用这些大小来获得与"r1“相关的内容联系起来。
有没有人介意给我指点一下?一语双关。
谢谢!
发布于 2012-02-09 03:45:52
r1是一个指针类型的变量,它的大小是固定的,并且总是相同的(就像任何给定类型的变量的大小一样),它不会大于(并且通常等于) sizeof(void *)。你真正想知道的是位于*r1的数组的大小(注意星号),而这是你不知道的。您必须自己跟踪它,通常如下所示:
size_t const n = get_some_number();
foo * p = calloc(n, sizeof(foo));现在使用pair (p,n)来描述动态数组。
(请注意,C99和C11有可变长度数组的概念,在其上下文中,sizeof实际上(有时)给出了实际的数组大小,但这有点模糊,而且在任何情况下它都不是您所要求的。)
https://stackoverflow.com/questions/9200257
复制相似问题