簡體   English   中英

我在C中的字符串填充功能不起作用?

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

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM