[英]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.