[英]My string padding function in C does not work?
我曾经尝试自己做过,但是失败了(我很想再次学习,但是只需要一个示例程序就可以了)。 本质上,我希望表示一个二进制数,但是当然要用0
填充到最近的字节,因此我在这里找到了另一个问题的函数:
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"));
不幸的是,它显示“ Test:”,但没有其他内容。 如果您需要知道的话,我的dec2bin
返回一个简单的char指针。
似乎什么导致它无能为力?
为什么此函数接受char * pad而不能接受char pad,所以我可以只用'0'填充它,“ 0”也可以工作,还是添加一个空终止符将其拧紧?
编辑 :或有人可以提供一个简单的示例(或我需要做什么)来填补这一点? 这个代码片段似乎并不是那么好。
我当时想创建一个初始化为零的chararray,然后再复制二进制文件,但是如何使其工作逃脱了我的工作。
返回时,“填充”指向字符串的末尾。
这是一个简单的示例实现。 它依赖于调用者来管理和传递将执行填充的空间。
char *PadLeft(char *bufBeg, size_t bufSize, char padChar)
{
char *p = bufBeg;
char *end = bufBeg + bufSize;
while (p < end && isspace(*p))
{
*p = padChar;
p++;
}
return bufBeg;
}
实际上,它看起来像这样...
char padArea[32 + 1];
snprintf(padArea, sizeof(padArea), "%*s", sizeof(padArea) - 1, dec2bin(~myInt));
PadLeft(padArea, sizeof(padArea), '0');
...
...要么...
int padAreaSize = 32 + 1;
char *padArea = malloc(padAreaSize);
snprintf(padArea, padAreaSize, "%*s", padAreaSize - 1, dec2bin(~myInt));
PadLeft(padArea, padAreaSize, '0');
...
free(padArea);
(别忘了添加错误检查,为清楚起见,这里省略了)
右移功能类似于:
char *PadRight(char *bufBeg, size_t bufSize, char padChar)
{
char *p = bufBeg + bufSize;
while (--p >= bufBeg && isspace(*p))
{
*p = padChar;
}
return bufBeg;
}
int padAreaSize = 32 + 1;
char *padArea = malloc(padAreaSize);
snprintf(padArea, padAreaSize, "%-*s", padAreaSize - 1, dec2bin(~myInt));
PadRight(padArea, padAreaSize, '0');
...
free(padArea);
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.