【发布时间】:2010-12-05 06:32:37
【问题描述】:
我曾尝试自己做,但失败了(我很想再做一次来学习,但只需要它用于示例程序)。本质上,我希望表示一个二进制数,但当然用0's 填充到最近的字节,所以我在这里找到了另一个问题的函数:
char * string_pad(char * string, size_t padlen, char * pad) {
size_t lenstring = strlen(string);
size_t lenpad = strlen(pad);
char * padded = (char*)malloc(lenstring + lenpad + 1);
strncpy(padded, string, lenstring); /* copy without '\0' */
padded += lenstring; /* prepare for first append of pad */
for(padlen += 1; padlen > 0; padlen--, padded += lenpad)
strncpy(padded, pad, lenpad);
*padded = '\0';
return padded;
}
我这样称呼它:
printf("Test: %s\n", string_pad(dec2bin(~myInt), 32, "0"));
不幸的是,它打印“测试:”但没有别的。如果你需要知道的话,我的dec2bin 会顺便返回一个简单的 char 指针。
什么似乎导致它什么也不做?
为什么这个函数接受 char* pad 而不是 char pad,所以我可以用 '0' 填充它,“0” 也可以工作,还是添加一个空终止符来搞砸它?
编辑:或者有人可以提供一个简单的例子(或者我需要做什么)来填补这个?这个sn-p似乎不是那么好..
我正在考虑创建一个初始化为零的 chararray,然后复制二进制文件,但如何让它工作却让我无法理解..
【问题讨论】:
-
对于初学者来说,malloc 看起来不对 - 它应该至少分配 (padlen + 1) 个字节。
-
注意到,让我想知道这段代码 sn-p 是否值得修复.. 我唯一的另一个 sn-p 这样做使用 sprintf 不正确:P.
-
F:你使用这个函数的方式是内存泄漏。它返回一个指向 malloc'ed 内存的指针,您使用该指针作为
printf的参数。它使用指针作为临时变量,现在你无法free内存。