我正在尝试编写一个将基数为10的整数转换为二进制数的函数。
我像这样构造函数:
void dec2bin(int dec, char * bin);该函数将通过参数中的指针存储二进制结果。它被传递给一个在别处声明的变量,如下所示:
char *r1 = (char *)malloc(24);该函数必须做的第一件事是用全零填充"24位结果“。它现在工作得很好,因为我已经根据我知道的“大小”对它进行了编码,但我不知道如何确定任意"r1“的”大小“。我认为使用sizeof函数的每一种方法都不会给我24。
在这一点上,我感到困惑,并且没有将字符、字符*等的各自大小之间的关系与如何使用这些大小来获得与"r1“相关的内容联系起来。
有没有人介意给我指点一下?一语双关。
谢谢!
发布于 2012-02-09 03:44:55
我不知道如何确定任意"r1“的”大小“。
您不能这样做:在调用之后,您传递给malloc的有关大小的信息将不可逆转地丢失。在这一点上,您所拥有的只是指向至少24字节的内存块的指针。如果您需要大小,您需要将其存储在其他地方-例如,在您随身携带的单独变量中。
此问题的两个典型解决方法包括(1)在分配的空间中存储以零终止的字符串,并使用该字符串的长度作为已分配区块大小的代理,以及(2)定义包含大小和已分配指针的自己的结构。这两种解决方案都不是理想的,但至少你有选择。
发布于 2012-02-09 03:47:01
您可以将大小作为另一个参数进行传递:
void dec2bin(int dec, char * bin, size_t max_chars);发布于 2012-02-09 03:45:31
r1的类型是char* (字符指针),所以像所有指针一样,它的大小是4(或8,取决于您的情况)。不管你分配给它的内存块有多大。
你不能从指针中检索分配的块的大小,所以如果你以后需要这个大小,你必须自己记住这个大小(例如,通过将它存储在一个不同的变量中)。
https://stackoverflow.com/questions/9200257
复制相似问题